Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ42)]

읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ42)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ42)]

2023. 7. 10. 23:34

πŸ“™ 1. 읡λͺ… ν΄λž˜μŠ€μ™€ λžŒλ‹€μ‹

  μžλ°”μ—μ„œ ν•¨μˆ˜ νƒ€μž…μ„ ν‘œν˜„ν•  λ•Œ 좔상 λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ§Œ 담은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν–ˆλ‹€. 이런 μΈν„°νŽ˜μ΄μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό ν•¨μˆ˜ 객체(function object)라고 ν•˜λ©°, νŠΉμ • ν•¨μˆ˜λ‚˜ λ™μž‘μ„ λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©ν•˜μ˜€λ‹€.

  JDK 1.1이 λ“±μž₯ν•˜λ©΄μ„œ ν•¨μˆ˜ 객체λ₯Ό λ§Œλ“œλŠ” μ£Όμš” μˆ˜λ‹¨μ€ 읡λͺ… ν΄λž˜μŠ€κ°€ λ˜μ—ˆλ‹€.

Collections.sort(words, new Comparator<String>() {
    public int compare(String s1, String s2) {
        return Integer.compare(s1.length(), s2.length());
    }
});

  ν•˜μ§€λ§Œ, μœ„μ˜ μ½”λ“œμ™€ 같이 읡λͺ… ν΄λž˜μŠ€ λ°©μ‹μ€ μ½”λ“œκ°€ λ„ˆλ¬΄ κΈΈκΈ° λ•Œλ¬Έμ— μžλ°”λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— μ ν•©ν•˜μ§€ μ•Šμ•˜λ‹€.

 

  κ·Έλž˜μ„œ μžλ°” 8에 μ™€μ„œ μ§€κΈˆμ€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λΌ λΆ€λ₯΄λŠ” 이 μΈν„°νŽ˜μ΄μŠ€λ“€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λžŒλ‹€μ‹μ„ μ‚¬μš©ν•΄ λ§Œλ“€ 수 있게 λ˜μ—ˆλ‹€.

Collections.sort(words,
    (s1, s2) -> Integer.compare(s1.length(), s2.length()));

  λžŒλ‹€μ˜ νƒ€μž…μ€ '(Comparator<String>), 맀개 λ³€μˆ˜μ˜ νƒ€μž…μ€ String, λ°˜ν™˜κ°’μ˜ νƒ€μž…μ€ intλ‹€. ν•˜μ§€λ§Œ, μ»΄νŒŒμΌλŸ¬κ°€ λ¬Έλ§₯을 μ‚΄νŽ΄ νƒ€μž…μ„ μΆ”λ‘ ν•  수 있기 λ•Œλ¬Έμ— λ”°λ‘œ 언급을 ν•˜μ§€ μ•Šμ€ 것이닀. λ¬Όλ‘  μ»΄νŒŒμΌλŸ¬κ°€ νƒ€μž…μ„ κ²°μ •ν•˜μ§€ λͺ»ν•  λ•ŒλŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 직접 λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

  νƒ€μž…μ„ λͺ…μ‹œν•΄μ•Ό μ½”λ“œκ°€ 더 λͺ…ν™•ν•  λ•Œλ§Œ μ œμ™Έν•˜κ³ λŠ”, λžŒλ‹€μ˜ λͺ¨λ“  λ§€κ°œλ³€μˆ˜ νƒ€μž…μ„ μƒλž΅ν•˜λ„λ‘ ν•˜μž.

 

  λ¬Όλ‘  μ•„λž˜μ™€ 같이 μΆ”κ°€μ μœΌλ‘œ μ½”λ“œλ₯Ό 더 κ°„λ‹¨νžˆ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.

  • λΉ„κ΅μž 생성 λ©”μ„œλ“œ μ‚¬μš©
Collections.sort(words, Comparator.comparingInt(String::length));
  • List μΈν„°νŽ˜μ΄μŠ€μ— μΆ”κ°€λœ sort μ‚¬μš©
words.sort(Comparator.comparingInt(String::length));

 

 

πŸ“™ 2. λžŒλ‹€μ‹μ˜ ν™œμš©

  λžŒλ‹€λ₯Ό μ–Έμ–΄ μ°¨μ›μ—μ„œ μ§€μ›ν•˜λ©΄μ„œ κΈ°μ‘΄μ—λŠ” μ ν•©ν•˜μ§€ μ•Šμ•˜λ˜ κ³³μ—μ„œλ„ ν•¨μˆ˜ 객체λ₯Ό μ‹€μš©μ μœΌλ‘œ μ‚¬μš©ν•  수 있게 λ˜μ—ˆλ‹€.

public enum Operation {
    PLUS("+") {
        public double apply(double x, double y) { return x + y; }
    },
    MINUS("-") {
        public double apply(double x, double y) { return x - y; }
    },
    TIMES("*") {
        public double apply(double x, double y) { return x * y; }
    },
    DIVIDE("/") {
        public double apply(double x, double y) { return x / y; }
    };

    private final String symbol;

    Operation(String symbol) {
        this.symbol = symbol;
    }

    @Override
    public String toString() {
        return symbol;
    }

    public abstract double apply(double x, double y);
}

  μœ„μ˜ μ½”λ“œμ—μ„œ apply λ©”μ„œλ“œμ˜ λ™μž‘μ΄ μƒμˆ˜λ§ˆλ‹€ 달라야 ν•΄μ„œ μƒμˆ˜λ³„ 클래슀 λͺΈμ²΄λ₯Ό μ‚¬μš©ν•΄ 각 μƒμˆ˜μ—μ„œ apply λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ˜€λ‹€.(μ•„μ΄ν…œ 34)

  μ—¬κΈ°μ„œ μ•„λž˜μ™€ 같이 λžŒλ‹€λ₯Ό μ΄μš©ν•˜λ©΄ μ—΄κ±° νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ΄μš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ μƒμˆ˜λ³„λ‘œ λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λŠ” μ½”λ“œλ₯Ό μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

public enum Operation {
    PLUS("+", (x, y) -> x + y),
    MINUS("-", (x, y) -> x - y),
    TIMES("*", (x, y) -> x * y),
    DIVIDE("/", (x, y) -> x / y);

    private final String symbol;
    private final DoubleBinaryOperator op;

    Operation(String symbol, DoubleBinaryOperator op) {
        this.symbol = symbol;
        this.op = op;

    }

    @Override
    public String toString() { return symbol; }

    public double apply(double x, double y) {
        return op.applyAsDouble(x, y);
    };
}

 

  λžŒλ‹€ 기반 Operation μ—΄κ±° νƒ€μž…μ„ 보면 μƒμˆ˜λ³„ 클래슀 λͺΈμ²΄λŠ” 더 이상 μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λ‹€κ³  생각할 수 μžˆλ‹€.

  ν•˜μ§€λ§Œ, κΌ­ κ·Έλ ‡μ§€λŠ” μ•Šλ‹€. μ•„λž˜ 2κ°€μ§€ μƒν™©μ—μ„œλŠ” μƒμˆ˜λ³„ 클래슀 λͺΈμ²΄λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€

🚩 1. μ½”λ“œ 자체둜 λ™μž‘μ΄ λͺ…ν™•νžˆ μ„€λͺ…λ˜μ§€ μ•Šκ±°λ‚˜ μ½”λ“œ 쀄 μˆ˜κ°€ λ§Žμ•„μ§€λŠ” 경우

  λžŒλ‹€λŠ” 이름이 μ—†κ³  λ¬Έμ„œν™”λ„ λͺ»ν•œλ‹€. λ”°λΌμ„œ μ½”λ“œ 자체둜 λ™μž‘μ΄ λͺ…ν™•νžˆ μ„€λͺ…λ˜μ§€ μ•Šκ±°λ‚˜ μ½”λ“œ 쀄 μˆ˜κ°€ λ§Žμ•„μ§€λ©΄ λžŒλ‹€λ₯Ό μ“°μ§€ 말아야 ν•œλ‹€.

  (λžŒλ‹€λŠ” ν•œ 쀄 일 λ•Œ κ°€μž₯ μ’‹κ³  κΈΈμ–΄μ•Ό μ„Έ 쀄 μ•ˆμ— 끝내야 ν•œλ‹€.)

🚩 2. μΈμŠ€ν„΄μŠ€ ν•„λ“œλ‚˜ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Όλ§Œ ν•˜λŠ” 경우

  μ—΄κ±° νƒ€μž… μƒμ„±μžμ— λ„˜κ²¨μ§€λŠ” μΈμˆ˜λ“€μ˜ νƒ€μž…μ€ μ»΄νŒŒμΌνƒ€μž„μ— μΆ”λ‘ λœλ‹€. λ°˜λ©΄μ—, μΈμŠ€ν„΄μŠ€λŠ” λŸ°νƒ€μž„μ— λ§Œλ“€μ–΄μ§„λ‹€. κ·Έλž˜μ„œ μ—΄κ±° νƒ€μž… μƒμ„±μž μ•ˆμ˜ λžŒλ‹€λŠ” μ—΄κ±° νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€ λ©€λ²„에 μ ‘근을 ν•  μˆ˜ μ—†λ‹€.

 

 

πŸ“™ 3. λ°˜λ“œμ‹œ μ΅λͺ… ν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°

  λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν•˜λ©΄μ„œ 읡λͺ… 클래슀의 μ‚¬μš©μ΄ 쀄어든 것은 사싀이닀. ν•˜μ§€λ§Œ, μ•„λž˜ 3κ°€μ§€ μƒν™©κ³Ό κ°™μ΄ λžŒλ‹€λ‘œ λŒ€μ²΄ν•  μˆ˜ μ—†λŠ” κ³³λ“€μ΄ μžˆλ‹€.

🚩 1. ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€κ°€ μ•„λ‹Œ 경우

λžŒλ‹€λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ—μ„œλ§Œ 쓰이기 λ•Œλ¬Έμ΄λ‹€. κ·Έλž˜μ„œ 좔상 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ λ•Œ λžŒλ‹€ λŒ€μ‹  읡λͺ… 클래슀λ₯Ό 써야 ν•œλ‹€.

🚩 2. 좔상 λ©”μ„œλ“œκ°€ μ—¬λŸ¬ 개인 μΈν„°νŽ˜μ΄μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 경우

🚩 3. ν•¨μˆ˜ 객체가 μžμ‹ μ„ μ°Έμ‘°ν•΄μ•Ό ν•˜λŠ” 경우

  λžŒλ‹€λŠ” μžμ‹ μ„ μ°Έμ‘°ν•  수 μ—†λ‹€. λžŒλ‹€μ—μ„œμ˜ thisλŠ” λ°”κΉ₯ μΈμŠ€ν„΄μŠ€λ₯Ό 가리킨닀.

  반면 읡λͺ… ν΄λž˜μŠ€μ—μ„œμ˜ thisλŠ” 읡λͺ… 클래슀의 μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ 가리킨닀. κ·Έλž˜μ„œ ν•¨μˆ˜ κ°μ²΄κ°€ μžμ‹ μ„ μ°Έμ‘°ν•΄μ•Ό ν•œλ‹€λ©΄ λ°˜λ“œμ‹œ μ΅λͺ… ν΄λž˜μŠ€λ₯Ό μ¨μ•Ό ν•œλ‹€.

 

 

πŸ“™ 4. μ£Όμ˜μ 

  λžŒλ‹€λ„ 읡λͺ… 클래슀처럼 직렬화 ν˜•νƒœκ°€ κ΅¬ν˜„λ³„λ‘œ(κ°€λ Ή κ°€μƒλ¨Έμ‹ λ³„λ‘œ) λ‹€λ₯Ό 수 μžˆμœΌλ―€λ‘œ λžŒλ‹€λ₯Ό μ§λ ¬ν™”ν•˜λŠ” 일은 극히 μ‚Όκ°€μ•Ό ν•œλ‹€.

 

ν•΄λ‹Ή 글은 Joshua Bloch λ‹˜μ˜ 'Effective Java 3/E'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

'πŸ“‚ JAVA > μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν‘œμ€€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ44)]  (0) 2023.07.24
λžŒλ‹€λ³΄λ‹€λŠ” λ©”μ„œλ“œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ43)]  (0) 2023.07.18
μ •μ˜ν•˜λ €λŠ” 것이 νƒ€μž…μ΄λΌλ©΄ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ41)]  (0) 2023.07.09
@Override μ• λ„ˆν…Œμ΄μ…˜μ„ μΌκ΄€λ˜κ²Œ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ40)]  (0) 2023.07.09
λͺ…λͺ… νŒ¨ν„΄λ³΄λ‹€ μ• λ„ˆν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ39)]  (0) 2023.07.06
  • πŸ“™ 1. 읡λͺ… ν΄λž˜μŠ€μ™€ λžŒλ‹€μ‹
  • πŸ“™ 2. λžŒλ‹€μ‹μ˜ ν™œμš©
  • πŸ“™ 3. λ°˜λ“œμ‹œ μ΅λͺ… ν΄λž˜μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°
  • πŸ“™ 4. μ£Όμ˜μ 
'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • ν‘œμ€€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ44)]
  • λžŒλ‹€λ³΄λ‹€λŠ” λ©”μ„œλ“œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λΌ - [7μž₯. λžŒλ‹€μ™€ 슀트림(μ•„μ΄ν…œ43)]
  • μ •μ˜ν•˜λ €λŠ” 것이 νƒ€μž…μ΄λΌλ©΄ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ41)]
  • @Override μ• λ„ˆν…Œμ΄μ…˜μ„ μΌκ΄€λ˜κ²Œ μ‚¬μš©ν•˜λΌ - [6μž₯. μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜(μ•„μ΄ν…œ40)]
Amenable
Amenable
CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.