πToday...
μ΄μ λ μ΄λ¦°μ΄λ μ΄μ¬μ 곡λΆλ₯Ό μ κΉ μ¬μμ§λ§ μ€λλΆν° λ€μ λ λ¬λ €λ³΄μ!
βμ€λμ TIL(Today I Learn)
μ λν μ΄μ (annotation)
μ λν μ΄μ μ μμ€μ½λκ° μ»΄νμΌλκ±°λ μ€νλ λ μ»΄νμΌλ¬ λ° λ€λ₯Έ νλ‘κ·Έλ¨μκ² νμν μ 보λ₯Ό μ λ¬ν΄ μ£Όλ λ¬Έλ²μμμ΄λ€. μ£Όμμ κ°λ°μμκ² μ 보λ₯Ό μ λ¬νλ€λ©΄ μ λν μ΄μ μ μ»΄νμΌλ¬μκ² μ 보λ₯Ό μ λ¬νλ€κ³ μκ°νλ©΄ λ κ²κ°λ€.
# @Override
class SuperClass {
public void example() {
System.out.println("example() of SuperClass");
}
}
class SubClass extends SuperClass {
@Override
public void example() {
System.out.println("example() of SubClass");
}
}
λ©μλ μμλ§ λΆμΌμμλ μλν μ΄μ μΌλ‘, μ μΈν λ©μλλ₯Ό μ€λ²λΌμ΄λ© νκ±°λ, μΆμ λ©μλλ₯Ό ꡬννλ λ©μλλΌλ κ²μ μ»΄νμΌλ¬μκ² μλ €μ£Όλ μν μνλ€. μμν΄λμ€μμ @Overrideκ° λΆμ΄μλ λ©μλλͺ κ³Ό κ°μ μ΄λ¦μ λ©μλλ₯Ό μ°Ύμμ μλ€λ©΄, μ»΄νμΌλ¬κ° μ»΄νμΌ μλ¬λ₯Ό λ°μμν¨λ€.
# @Deprecated
class OldClass {
@Deprecated
private int oldField;
@Deprecated
int getOldField() { return oldField; }
}
κΈ°μ‘΄μ μ¬μ©νλ κΈ°μ μ΄ λ€λ₯Έ κΈ°μ λ‘ λ체λμ΄ κΈ°μ‘΄ κΈ°μ μ μ μ©ν μ½λλ₯Ό λμ΄μ μ¬μ©νμ§ μλλ‘ μ λνλ κ²½μ°μ μ¬μ©νλ€. νΈνμ± λ¬Έμ λ±μΌλ‘ μμ νκΈ° κ³€λν΄ λ¨κ²¨λμ΄μΌ νμ§λ§ λμ΄μ μ¬μ©νλ κ²μ κΆμ₯νμ§ μμλ μ¬μ©νλ€.
# @SuppressWarnings
λ€μκ³Ό κ°μ΄ κ²½κ³ μ νμ λ°λΌμ κ²½κ³ λ©μΈμ§λ₯Ό μ νμ μΌλ‘ μ΅μ ν μμλ€.
# @FuntionalInterface
@FunctionalInterface
public interface ExampleInterface {
public abstract void example(); // λ¨ νλμ μΆμ λ©μλ
}
ν¨μν μΈν°νμ΄μ€λ₯Ό μ μΈν λ, μ»΄νμΌλ¬κ° ν¨μν μΈν°νμ΄μ€ μ μΈμ΄ λ°λ₯΄κ² μ μΈ λμλμ§ νμΈνλλ‘ νλ€. λ°λ₯΄κ² μ μΈλμ§ μμ κ²½μ° μλ¬λ₯Ό λ°μμν¨λ€. (ν¨μνμΈν°νμ΄μ€λ λ¨νλμ μΆμλ©μλλ₯Ό κ°μ§λ€.)
# μ¬μ©μ μ μ μ λν μ΄μ
@interface μ λν
μ΄μ
λͺ
{ // μΈν°νμ΄μ€ μμ @κΈ°νΈλ§ λΆμ΄λ©΄ μ λν
μ΄μ
μ μ μν μ μμ΅λλ€.
νμ
μμλͺ
(); // μ λν
μ΄μ
μμλ₯Ό μ μΈ
}
μ λν μ΄μ μ java.lang.annotationμ μμλ°κΈ° λλ¬Έμ λ€λ₯Έ ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό μμλ°μμ μλ€.
λλ€μ(Lambda Expression)
λλ€μμ ν¨μλ₯Ό μ’λ κ°λ¨νκ³ νΈλ¦¬νκ² νννκΈ° μν΄ κ³ μλ λ¬Έλ²μμμ΄λ€. μ΄λ¦μ΄ μκΈ° λλ¬Έμ μ΅λͺ κ°μ²΄λΌκ³ ν μμκ³ μ΄λ¬ν μ΅λͺ κ°μ²΄λ μ΅λͺ ν΄λμ€λ₯Ό ν΅ν΄μ λ§λ€μ΄μ§λ€. μ΅λͺ ν΄λμ€λ κ°μ²΄μ μ μΈκ³Ό μμ±μ λμμ νμ¬ μ€μ§νλμ κ°μ²΄λ₯Ό μμ±νκ³ λ¨νλ²λ§ μ¬μ©λλ μΌνμ© ν΄λμ€μ΄λ€.
// sum λ©μλ λλ€μ
(num1, num2) -> num1 + num2
// λλ€μμ κ°μ²΄λ‘ νν
new Object() {
int sum(int num1, int num2) {
return num1 + num1;
}
}
// μ μΈμ κ°λ₯ν μμμ§λ§ Object λ΄λΆμ sum μ΄μλ€. μ¦ μμ μ μΈλ sumμ 1νλ§ μ¬μ©λκ³ λ²λ €μ§λ€.
// κ·Έλ¬λ―λ‘ μ μνμμ Objectν΄λμ€μλ sumλ©μλκ° μμ΄μ Objectνμ
μ μ°Έμ‘°λ³μμ λ΄λλ€κ³ ν΄λ
// sumλ©μλλ₯Ό μ¬μ©ν μκ° μλ€.
μ΄κ²μ ν΄κ²°νκΈ° μνκ² λ°λ‘ ν¨μν μΈν°νμ΄μ€(Funtional Interface)μ΄λ€. μλ°μ μΈν°νμ΄μ€ λ¬Έλ²μ νμ©ν΄μ λλ€μμ λ€λ£¨λ λ°©λ²μΌλ‘ ν¨μν μΈν°νμ΄μ€μλ λ¨νλμ μΆμλ©μλλ§ μ μΈλκ³ , μ΄λ λλ€μκ³Ό μΈν°νμ΄μ€κ° 1:1λ‘ λ§€μΉ λλ κ²μ΄λ€.
@FunctionalInterface
public interface MyFunctionalInterface {
void accept(int x);
}
//μλ° μΈν°νμ΄μ€κ° μλ€λ©΄,,,
public class MyFunctionalInterfaceExample {
public static void main(String[] args) throws Exception {
MyFunctionalInterface example;
example = (x) -> {
int result = x * 5;
System.out.println(result);
};
example.accept(2);
example = (x) -> System.out.println(x * 5);
example.accept(2);
}
}
// μΆλ ₯κ°
10
10
[ν¨μνμΈν°νμ΄μ€] - https://codechacha.com/ko/java8-functional-interface/
# λ©μλ μ°Έμ‘°
λ©μλ μ°Έμ‘°λ λλ€μμμ λΆνμν λ§€κ° λ³μλ₯Ό μ κ±°ν λ μ¬μ©νλ€.
//맀κ°λ³μλ₯Ό μ λ¬νλ λλ€μ
(left, right) -> Math.max(left, right) //μλ κ² μ
λ ₯κ°κ³Ό μΆλ ₯κ°μ κ·Έλλ‘ λμ
νλκ²½μ°μ μ¬μ©
// ν΄λμ€μ΄λ¦::λ©μλμ΄λ¦
Math :: max // λ©μλ μ°Έμ‘° //μΈν°νμ΄μ€μ μΆμλ©μλκ° μ΄λ€ 맀κ°λ³μλ₯Ό κ°μ§λμ§,
//리ν΄νμ
μ 무μμΈμ§μ λ°λΌμ λ¬λΌμ§
# μ μ λ©μλ / μΈμ€ν΄μ€λ©μλ μ°Έμ‘°
//μ μ λ©μλλ₯Ό μ°Έμ‘°ν λλ ν΄λμ€ μ΄λ¦ λ€μ :: κΈ°νΈλ₯Ό λΆμ΄κ³ μ μ λ©μλ μ΄λ¦μ κΈ°μ
ν΄λμ€ :: λ©μλ
//μΈμ€ν΄μ€ λ©μλμ κ²½μ°μλ λ¨Όμ κ°μ²΄λ₯Ό μμ±ν λ€μ
//μ°Έμ‘° λ³μ λ€μ ::κΈ°νΈλ₯Ό λΆμ΄κ³ μΈμ€ν΄μ€ λ©μλ μ΄λ¦μ κΈ°μ
μ°Έμ‘° λ³μ :: λ©μλ
# μμ±μ μ°Έμ‘°
μμ±μλ₯Ό μ°Έμ‘°νλ€λκ²μ κ°μ²΄μμ±μ μλ―Ένλ€. μ¦ λ¨μν κ°μ²΄λ₯Ό μμ±νκ³ λ¦¬ν΄νλλ‘ κ΅¬μ±λ λλ€μμ μμ±μ μ°Έμ‘°λ‘ λμΉκ° κ°λ₯νλ€.
(a,b) -> new ν΄λμ€(a,b)
//μμ±μ μ°Έμ‘° λ¬Έλ²
ν΄λμ€ :: new
μ΅λͺ κ°μ²΄
[μ΅λͺ κ°μ²΄ ref] - https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B5%EB%AA%85-%ED%81%B4%EB%9E%98%EC%8A%A4Anonymous-Class-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0
πνΌμμ ν΄κ²°νκΈ°
μμ±μ μ°Έμ‘°μ λνμ΄ν΄
import java.util.function.BiFunction;
import java.util.function.Function;
class ConstructorRef {
public static void main(String[] args) throws Exception {
Function<String, Member> function1 = a -> new Member(a); //μκ±°λ Member::new λ‘ λ³νκ°λ₯
Member member1 = function1.apply("kimcoding"); //μκΈ°μ λ€μ΄κ°λ κ°μμ λ°λΌ μ ν΄μ§λ€.
BiFunction<String, String, Member> function2 = Member::new; //μκ±°λ (a,b) -> new Member(a,b) μΈκ±°λ€
Member member2 = function2.apply("kimcoding", "κΉμ½λ©");
}
}
class Member {
private String name;
private String id;
public Member() {
System.out.println("Member() μ€ν");
}
public Member(String id) {
System.out.println("Member(String id) μ€ν");
this.id = id;
}
public Member(String name, String id) {
System.out.println("Member(String name, String id) μ€ν");
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
}
μμ±μκ° μ€λ²λ‘λ©λμ΄ μ¬λ¬κ°κ° μμΌλ©΄ μ»΄νμΌλ¬λ ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλμ λμΌν 맀κ°λ³μ νμ κ³Ό κ°μκ° μλ μμ±μλ₯Ό μ°Ύμμ μ€ννλ€.