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/μ΄νŽ™ν‹°λΈŒ μžλ°”

νƒœκ·Έ 달린 ν΄λž˜μŠ€λ³΄λ‹€λŠ” 클래슀 계측ꡬ쑰λ₯Ό ν™œμš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ23)]

νƒœκ·Έ 달린 ν΄λž˜μŠ€λ³΄λ‹€λŠ” 클래슀 계측ꡬ쑰λ₯Ό ν™œμš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ23)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

νƒœκ·Έ 달린 ν΄λž˜μŠ€λ³΄λ‹€λŠ” 클래슀 계측ꡬ쑰λ₯Ό ν™œμš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ23)]

2023. 5. 8. 20:53

1. νƒœκ·Έ 달린 클래슀 🎧

  νƒœκ·Έ 달린 ν΄λž˜μŠ€λž€ 두 κ°€μ§€ μ΄μƒμ˜ 의미λ₯Ό ν‘œν˜„ν•  수 있으며, 그쀑 ν˜„μž¬ ν‘œν˜„ν•˜λŠ” 의미λ₯Ό νƒœκ·Έ κ°’μœΌλ‘œ μ•Œλ €μ£ΌλŠ” 클래슀λ₯Ό λ§ν•œλ‹€.

  μ•„λž˜ μ½”λ“œλŠ” 원과 μ‚¬κ°ν˜•μ„ ν‘œν˜„ν•  수 μžˆλŠ” νƒœκ·Έ 달린 ν΄λž˜μŠ€μ΄λ‹€.

public class Figure {

    enum Shape {RECTANGLE, CIRCLE};

    // νƒœκ·Έ ν•„λ“œ - ν˜„μž¬ λͺ¨μ–‘을 λ‚˜νƒ€λ‚Έλ‹€.
    final Shape shape;

    // λ‹€μŒ ν•„λ“œλ“€μ€ λͺ¨μ–‘이 μ‚¬κ°ν˜•(RECTANGLE)일 λ•Œλ§Œ 쓰인닀.
    double length;
    double width;

    // λ‹€μŒ ν•„λ“œλŠ” λͺ¨μ–‘이 원(CIRCLE)일 λ•Œλ§Œ 쓰인닀.
    double radius;

    // μ›μš© μƒμ„±μž
    Figure2(double radius){
        shape = Shape.CIRCLE;
        this.radius = radius;
    }

    // μ‚¬κ°ν˜•μš© μƒμ„±μž
    Figure2(double length, double width) {
        shape = Shape.RECTANGLE;
        this.length = length;
        this.width = width;
    }

    double area() {
        switch(shape){
            case RECTANGLE:
                return length * width;
            case CIRCLE:
                return Math.PI * (radius * radius);
            default:
                throw new AssertionError(shape);
        }
    }
}

 

2. νƒœκ·Έ 달린 클래슀의 문제점 🎀

  νƒœκ·Έ 달린 ν΄λž˜μŠ€μ—λŠ” 단점이 λ„ˆλ¬΄λ‚˜λ„ λ§Žλ‹€.

πŸ“• 단점 1. μ—΄κ±° νƒ€μž… μ„ μ–Έ, νƒœκ·Έ ν•„λ“œ, switch λ¬Έ λ“± μ“Έλ°μ—†λŠ” μ½”λ“œκ°€ λ§Žλ‹€.

πŸ“• λ‹¨μ  2. μ—¬λŸ¬ κ΅¬ν˜„이 ν•œ ν΄λž˜μŠ€μ— ν˜Όν•©λΌ μžˆμ–΄μ„œ κ°€λ…성이 λ‚˜μ˜λ‹€.

πŸ“• λ‹¨μ  3. λ‹€λ₯Έ μ˜λ―Έλ₯Ό μœ„ν•œ μ½”λ“œλ„ μ–Έμ œλ‚˜ ν•¨κ»˜ ν•˜λ‹ˆ λ©”λͺ¨λ¦¬λ„ λ§Žμ΄ μ‚¬μš©ν•œλ‹€.

πŸ“• λ‹¨μ  4. ν•„λ“œλ“€μ„ final둜 μ„ μ–Έν•˜λ €λ©΄ ν•΄λ‹Ή μ˜λ―Έμ— μ“°μ΄μ§€ μ•ŠλŠ” ν•„λ“œλ“€κΉŒμ§€ μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€.

πŸ“• λ‹¨μ  5. λ˜ λ‹€λ₯Έ μ˜λ―Έλ₯Ό μΆ”κ°€ν•˜λ €λ©΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•œλ‹€.

  μ •μ‚¬κ°ν˜•μ„ λ‚˜νƒ€λ‚΄λŠ” Squareλ₯Ό μΆ”κ°€ν•œλ‹€κ³  생각해 보면 area()의 switch λ¬Έμ—μ„œ μƒˆ 의미λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν•΄μ•Ό ν•œλ‹€. ν•˜λ‚˜λΌλ„ 빠뜨리면 λŸ°νƒ€μž„μ— λ¬Έμ œκ°€ μƒκΈ°κ²Œ λœλ‹€.

단점 6. μΈμŠ€ν„΄μŠ€ νƒ€μž…λ§ŒμœΌλ‘œλŠ” ν˜„μž¬ λ‚˜νƒ€λ‚΄λŠ” μ˜λ―Έλ₯Ό μ•Œ κΈΈμ΄ μ „ν˜€ μ—†λ‹€.

  Figure νƒ€μž…μ„ μ‚¬μš©ν•œλ‹€κ³  ν•΄μ„œ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ 원을 λ‚˜νƒ€λ‚΄λŠ” 것인지 μ‚¬κ°ν˜•μ„ λ‚˜νƒ€λ‚΄λŠ” 것인지 μ•Œ μˆ˜κ°€ μ—†λ‹€.

 

3. 클래슀 계측 ꡬ쑰 (ν•΄κ²°μ±…) πŸ“»

  μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 클래슀 계측ꡬ쑰λ₯Ό ν™œμš©ν•΄μ•Ό ν•œλ‹€.

  μ‚¬μš©λ²•μ€ μ•„λž˜μ™€ κ°™λ‹€.

  1. κ³„μΈ΅κ΅¬μ‘°μ˜ λ£¨νŠΈ(root)κ°€ λ  μΆ”상 ν΄λž˜μŠ€λ₯Ό μ •μ˜ν•œλ‹€.
  2. νƒœκ·Έ 값에 따라 λ™μž‘μ΄ λ‹¬λΌμ§€λŠ” λ©”μ„œλ“œλ“€μ„ 루트 클래슀의 좔상 λ©”μ„œλ“œλ‘œ μ„ μ–Έν•œλ‹€.
  3. νƒœκ·Έ 값에 상관없이 λ™μž‘μ΄ μΌμ •ν•œ λ©”μ„œλ“œλ“€μ„ 루트 ν΄λž˜μŠ€μ— 일반 λ©”μ„œλ“œλ‘œ μΆ”κ°€ν•œλ‹€.
  4. λͺ¨λ“  ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 데이터 ν•„λ“œλ“€λ„ μ „λΆ€ 루트 클래슀둜 μ˜¬λ¦°λ‹€.
abstract public class Figure {

    // νƒœκ·Έ 값에 따라 λ™μž‘μ΄ λ‹¬λΌμ§€λŠ” λ©”μ„œλ“œλ₯Ό 좔상 λ©”μ„œλ“œλ‘œ μ„ μ–Έ
    abstract double area();
}

----------

public class Circle extends Figure {

    final double radius;

    Circle(double radius){
        this.radius = radius;
    }

    @Override
    double area() {
        return Math.PI * (radius * radius);
    }
}

----------

public class Rectangle extends Figure {

    final double length;
    final double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    double area() {
        return length * width;
    }
}

  μœ„μ™€ 같은 클래슀 κ³„μΈ΅κ΅¬μ‘°λŠ” νƒœκ·Έ 달린 클래슀의 단점듀을 λͺ¨λ‘ 없애버린닀. μž₯점은 μ•„λž˜μ™€ κ°™λ‹€.

πŸ“˜ μž₯점 1. κ°„κ²°ν•˜κ³  λͺ…ν™•ν•˜κ³ , μ“Έλ°μ—†λŠ” μ½”λ“œλ„ λͺ¨λ‘ 사라진닀.

πŸ“˜ μž₯점 2. 각 μ˜λ―Έμ— λ…λ¦½λœ ν΄λž˜μŠ€μ— λ‹΄μ•„ κ΄€λ ¨ μ—†λ˜ 데이터 ν•„λ“œλ₯Ό λͺ¨λ‘ μ œκ±°ν•œλ‹€.

πŸ“˜ μž₯점 3. 살아남은 ν•„λ“œλ“€μ€ λͺ¨λ‘ final이닀.

πŸ“˜ μž₯점 4. μ‹€μˆ˜λ‘œ 빼먹은 caseλ¬Έ λ•Œλ¬Έμ— λŸ°νƒ€μž„ 였λ₯˜κ°€ λ°œμƒν•  일도 μ—†λ‹€.

πŸ“˜ μž₯점 5. λ£¨νŠΈ ν΄λž˜μŠ€μ˜ μ½”λ“œλ₯Ό κ±΄λ“œλ¦¬μ§€ μ•Šκ³ λ„ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ΄ λ…λ¦½μ μœΌλ‘œ κ³„측ꡬ쑰λ₯Ό ν™•μž₯ν•˜κ³  ν•¨κ»˜ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€. (μ•„λž˜μ˜ Squareκ°€ κ·Έ μ˜ˆμ‹œμ΄λ‹€.)

public class Square extends Rectangle {

    Square(double side){
        super(side, side);
    }
}

  νƒœκ·Έ 달린 클래슀λ₯Ό 써야 ν•˜λŠ” 상황은 거의 μ—†λ‹€. κ·ΈλŸ¬λ―€λ‘œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 데 νƒœκ·Έκ°€ λ“±μž₯ν•œλ‹€λ©΄ νƒœκ·Έλ₯Ό μ—†μ• κ³  κ³„μΈ΅κ΅¬μ‘°λ‘œ λŒ€μ²΄ν•˜λŠ” 방법을 생각해 보자. λ˜ν•œ, κΈ°μ‘΄ ν΄λž˜μŠ€κ°€ νƒœκ·Έ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ κ³„μΈ΅κ΅¬μ‘°λ‘œ λ¦¬νŒ©ν„°λ§ ν•˜λŠ” κ±Έ κ³ λ―Όν•΄ 보자.

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

ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” ν•œ νŒŒμΌμ— ν•˜λ‚˜λ§Œ λ‹΄μœΌλΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ25)]  (0) 2023.05.08
멀버 ν΄λž˜μŠ€λŠ” λ˜λ„λ‘ static으둜 λ§Œλ“€λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ24)]  (1) 2023.05.08
μΈν„°νŽ˜μ΄μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ22)]  (0) 2023.05.07
μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•˜λŠ” μͺ½μ„ 생각해 μ„€κ³„ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ21)]  (1) 2023.05.07
좔상 ν΄λž˜μŠ€λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μš°μ„ ν•˜λΌ(좔상 골격 κ΅¬ν˜„(Skeletal Implementation) 클래슀)(2) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ20)]  (0) 2023.05.07
  • 1. νƒœκ·Έ 달린 클래슀 🎧
  • 2. νƒœκ·Έ 달린 클래슀의 문제점 🎀
  • 3. 클래슀 계측 ꡬ쑰 (ν•΄κ²°μ±…) πŸ“»
'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” ν•œ νŒŒμΌμ— ν•˜λ‚˜λ§Œ λ‹΄μœΌλΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ25)]
  • 멀버 ν΄λž˜μŠ€λŠ” λ˜λ„λ‘ static으둜 λ§Œλ“€λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ24)]
  • μΈν„°νŽ˜μ΄μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ22)]
  • μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•˜λŠ” μͺ½μ„ 생각해 μ„€κ³„ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ21)]
Amenable
Amenable
CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

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

단좕킀

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

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

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

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

λͺ¨λ“  μ˜μ—­

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

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