μΈν°νμ΄μ€ μμ±, λ©μλ μ μ
public interface Foo {
void printName();
}
μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€ μμ±, λ©μλ ꡬν
public class DefaultFoo implements Foo {
String name;
// νλΌλ―Έν°λ‘ nameμ λ°λλ€κ³ κ°μ
public DefaultFoo(String name){
this.name = name;
}
@Override
public void printName(){
System.out.println(this.name);
}
}
μΈμ€ν΄μ€ μμ± λ° λ©μλ νΈμΆ
public class App {
public static void main(String[] args) {
Foo foo = new DefaultFoo("TheJava8");
// TheJava8 μΆλ ₯
foo.printName();
}
}
μΈν°νμ΄μ€μ μλ‘μ΄ λ©μλλ₯Ό μΆκ°ν κ²½μ°, μΈν°νμ΄μ€λ₯Ό ꡬνν λͺ¨λ ν΄λμ€μμ μ€λ₯κ° λ°μνλ€.
μ΄λ΄ κ²½μ°, default ν€μλλ₯Ό μ΄μ©ν΄ κΈ°λ³Έ λ©μλλ₯Ό μ€λ₯ μμ΄ μΆκ°ν μ μλ€.
public interface Foo {
void printName();
default void printNameUpperCase(){
System.out.println(getName().toUpperCase());
}
String getName();
}
public class DefaultFoo implements Foo {
@Override
public void printName(){
System.out.println(this.name);
}
String name;
// νλΌλ―Έν°λ‘ nameμ λ°λλ€κ³ κ°μ
public DefaultFoo(String name){
this.name = name;
}
// getName λ©μλ ꡬν
@Override
public String getName() {
return this.name;
}
}
public class App {
public static void main(String[] args) {
Foo foo = new DefaultFoo("TheJava8");
// TheJava8 μΆλ ₯
foo.printName();
// THEJAVA8 μΆλ ₯
foo.printNameUpperCase();
}
}
κΈ°λ³Έ λ©μλλ ꡬννλ ν΄λμ€μμ μ¬μ μν μλ μλ€.
public class DefaultFoo implements Foo {
@Override
public void printName(){
System.out.println(this.name);
}
String name;
// νλΌλ―Έν°λ‘ nameμ λ°λλ€κ³ κ°μ
public DefaultFoo(String name){
this.name = name;
}
@Override
public void printNameUpperCase() {
System.out.println("Overrided " + this.name.toUpperCase());
}
// getName λ©μλ ꡬν
@Override
public String getName() {
return this.name;
}
}
public class App {
public static void main(String[] args) {
Foo foo = new DefaultFoo("TheJava8");
// TheJava8 μΆλ ₯
foo.printName();
// Overrided THEJAVA8 μΆλ ₯
foo.printNameUpperCase();
}
}
νμ§λ§ μΈν°νμ΄μ€μμ μ 곡νλ default κΈ°λ₯μ΄ λͺ¨λ ꡬν체μμ μ μμ μΌλ‘ λμν리λΌλ 보μ₯μ΄ μλ€.
(μ΄λ»κ² ꡬννλμ§ λͺ¨λ₯΄κΈ° λλ¬Έμ)
λ°λΌμ μ€λ₯ λ°©μ§λ₯Ό μν΄ μ΅μνμ λ
Έλ ₯μΌλ‘ μλμ κ°μ΄ @ImplSpecμ μ΄μ©ν΄ λ¬Έμνλ₯Ό μ§νν΄μΌνλ€.
public interface Foo {
void printName();
/**
* @ImplSpec μ΄ κ΅¬ν체λ getName()μΌλ‘ κ°μ Έμ¨ λ¬Έμλ₯Ό λλ¬Έμλ‘ μΆλ ₯νλ€.
*/
default void printNameUpperCase(){
System.out.println(getName().toUpperCase());
}
String getName();
}
Objectκ° μ 곡νλ κΈ°λ₯μ default λ©μλλ‘ μ 곡ν μ μλ€.
νμ§λ§ μΆμ λ©μλλ‘ μ μΈνλ κ²μ κ°λ₯νλ€.
public interface Foo {
.
.
.
// λΆκ°λ₯ (error)
default String toString(){}
// κ°λ₯
String toString();
}
Foo μΈν°νμ΄μ€λ₯Ό μμλ°μ Bar μΈν°νμ΄μ€μμ Fooκ° μ 곡νλ κΈ°λ³Έ λ©μλλ₯Ό μ 곡νκ³ μΆμ§ μμ κ²½μ°
Bar μΈν°νμ΄μ€μμ λ€μ μΆμ λ©μλλ‘ μ μΈνλ€.
public interface Bar extends Foo {
// μ΄λ κ² νλ©΄ Barλ₯Ό ꡬνν ν΄λμ€μμ Override ν΄μΌνλ€.
void printNameUpperCase();
}
public class DefaultBar implements Bar {
String name;
public DefaultBar(String name){
this.name = name;
}
@Override
public void printName() {
System.out.println(this.name);
}
@Override
public String getName() {
return this.name;
}
@Override
public void printNameUpperCase() {
System.out.println("BAR");
}
}
public class App {
public static void main(String[] args) {
Bar bar = new DefaultBar("TheJava8");
// TheJava8 μΆλ ₯
bar.printName();
// BAR μΆλ ₯
bar.printNameUpperCase();
}
}
Foo μΈν°νμ΄μ€μλ defaultκ° μκ³ Barμλ defaultκ° μλ κ²½μ°, ꡬννλ μΈν°νμ΄μ€μμ Foo/Bar μΈν°νμ΄μ€λ₯Ό λ λ€ implementsνκ² λλ©΄ λ Όλ¦¬μ μΌλ‘ λ μ€μ μ΄λ€ κ²μ μ¬μ©ν΄μΌν μ§ λͺ¨λ₯΄κΈ° λλ¬Έμ μ λ§€ν μν©μ΄ λ°μνμ¬ μ»΄νμΌ μ€λ₯κ° λ°μνλ€. μ΄λ κ² μΆ©λνλ κ²½μ°μλ μ§μ Overrideλ₯Ό ν΄μΌ νλ€.
public interface Bar {
void printName();
default void printNameUpperCase(){
System.out.println(getName().toUpperCase());
}
String getName();
}
public interface Foo {
void printName();
default void printNameUpperCase(){
System.out.println(getName().toUpperCase());
}
String getName();
}
public class DefaultBar implements Foo, Bar {
String name;
public DefaultBar(String name){
this.name = name;
}
@Override
public void printName() {
System.out.println(this.name);
}
@Override
public String getName() {
return this.name;
}
@Override
public void printNameUpperCase() {
System.out.println("DEFAULT BAR");
}
}
public class App {
public static void main(String[] args) {
Bar bar = new DefaultBar("TheJava8");
// TheJava8 μΆλ ₯
bar.printName();
// DEFAULT BAR μΆλ ₯
bar.printNameUpperCase();
}
}
μ νΈλ¦¬ν°λ ν¬νΌ λ©μλλ₯Ό μ 곡νκ³ μΆμ κ²½μ°, static ν€μλλ₯Ό μ¬μ©νμ¬ λ©μλλ₯Ό μ 곡ν μ μλ€.
public interface Foo {
.
.
static void printAnything(){
System.out.println("Foo");
}
}
public class App {
public static void main(String[] args) {
Foo.printAnything();
}
}
μΆμ² :
μΈνλ° κ°μ - λ μλ°, Java 8 (λ°±κΈ°μ )
https://www.inflearn.com/course/the-java-java8