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

λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™)(1) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]

λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™)(1) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™)(1) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]

2023. 4. 27. 00:18

  λΆˆλ³€ ν΄λž˜μŠ€λž€ μΈμŠ€ν„΄μŠ€μ˜ λ‚΄λΆ€ 값을 μˆ˜μ •ν•  수 μ—†λŠ” 클래슀λ₯Ό λ§ν•œλ‹€. λΆˆλ³€ μΈμŠ€ν„΄μŠ€μ— κ°„μ§λœ μ •λ³΄λŠ” κ³ μ •λ˜μ–΄ 객체가 νŒŒκ΄΄λŠ” μˆœκ°„κΉŒμ§€ μ ˆλŒ€ 달라지지 μ•ŠλŠ”λ‹€.

  λΆˆλ³€ ν΄λž˜μŠ€λŠ” κ°€λ³€ ν΄λž˜μŠ€λ³΄λ‹€ μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•˜κ³  μ‚¬μš©ν•˜κΈ° μ‰¬μš°λ©°, 였λ₯˜κ°€ 생길 여지도 적고 훨씬 μ•ˆμ „ν•˜λ‹€λŠ” 이점이 μžˆλ‹€.

μ•„μ΄ν…œ 17μ—μ„œλŠ” μ•„λž˜ 3κ°€μ§€ λ‚΄μš©μ„ 닀루고 μžˆλ‹€.

  1. λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™
  2. λΆˆλ³€ 클래슀의 μž₯점, 단점, 단점 λŒ€μ²˜ 방법
  3. λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  것

이번 κΈ€μ—μ„œλŠ” '1. λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™'에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

 

1. 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. πŸš•

public class PhoneNumber {

    private short areaCode, prefix, lineNum;

    public PhoneNumber(short areaCode, short prefix, short lineNum) {
        this.areaCode = areaCode;
        this.prefix = prefix;
        this.lineNum = lineNum;
    }

    public short getAreaCode() {
        return areaCode;
    }

    public short getPrefix() {
        return prefix;
    }

    public short getLineNum() {
        return lineNum;
    }
}

  μœ„μ™€ 같이 setterλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ” 것이 ν•˜λ‚˜μ˜ μ˜ˆμ‹œκ°€ 될 수 μžˆλ‹€.

 

2. 클래슀λ₯Ό ν™•μž₯ν•  수 없도둝 ν•œλ‹€. 🚌

public class MyPhoneNumber extends PhoneNumber {

    private String name;

    public MyPhoneNumber(short areaCode, short prefix, short lineNum, String name) {
        super(areaCode, prefix, lineNum);
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

  μœ„μ˜ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ PhoneNumberλ₯Ό 상속받은 MyPhoneNumber의 νƒ€μž…μœΌλ‘œ PhoneNumberλ₯Ό μ“Έ 수 μžˆλ‹€. 근데 MyPhoneNumber의 λ©”μ„œλ“œ λ•Œλ¬Έμ— 객체의 μƒνƒœκ°€ λ°”λ€” 수 있게 λ˜μ—ˆλ‹€. 즉, λ°”λ€” 수 μžˆλŠ” 객체가 λ˜μ—ˆλ‹€.

  이λ₯Ό λ§‰μ•„μ€˜μ•Ό ν•œλ‹€λŠ” 것인데 μ•„λž˜μ™€ 같이 final을 μ΄μš©ν•˜μ—¬ 상속을 막을 수 μžˆλ‹€. (λ’€μ—μ„œ λ‚˜μ˜€λŠ” 'λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  것'μ΄λΌλŠ” μ£Όμ œμ—μ„œ final을 μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹Œ λ‹€λ₯Έ 방법을 μΆ”κ°€μ μœΌλ‘œ μ•Œμ•„λ³Ό 것이닀.)

// 상속이 λΆˆκ°€λŠ₯ν•˜λ‹€
public final class PhoneNumber {

    private short areaCode, prefix, lineNum;

    ...
}

 

3. λͺ¨λ“  ν•„λ“œλ₯Ό final둜 μ„ μ–Έν•œλ‹€. πŸš–

public final class PhoneNumber {

    private final short areaCode, prefix, lineNum;

    ...
}

  μ‹œμŠ€ν…œμ΄ κ°•μ œν•˜λŠ” μˆ˜λ‹¨μ„ μ΄μš©ν•΄ μ„€κ³„μžμ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ λ“œλŸ¬λ‚΄λŠ” 방법이닀. μƒˆλ‘œ μƒμ„±λœ μΈμŠ€ν„΄μŠ€λ₯Ό λ™κΈ°ν™” μ—†μ΄ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ κ±΄λ„€λ„ λ¬Έμ œμ—†μ΄ λ™μž‘ν•˜κ²Œλ” λ³΄μž₯ν•˜λŠ” λ°λ„ ν•„μš”ν•˜λ‹€. (μ„±λŠ₯κ³Ό ν”„λ‘œκ·Έλž¨μ˜ κ²¬κ³ ν•¨μ„ μœ„ν•΄ final ν‚€μ›Œλ“œλŠ” μ“Έ μˆ˜ μžˆλŠ” ν•œ μ΅œλŒ€ν•œ λ§Žμ΄ μ“°λŠ” 게 μ’‹λ‹€κ³  ν•œλ‹€.)

 

4. λͺ¨λ“  ν•„λ“œλ₯Ό private둜 μ„ μ–Έν•œλ‹€. 🚍

public final class PhoneNumber {

    private final short areaCode, prefix, lineNum; // O
    // public final short areaCode, prefix, lineNum; // X

    ...
}

  public을 쓰더라도 final이 λΆ™μ–΄μ Έ 있으면 값을 λ°”κΏ€ μˆ˜λŠ” μ—†λ‹€.

  ν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ ν•„λ“œλ₯Ό 직접 μ°Έμ‘°λ₯Ό ν•˜κ²Œ 되면 λ‚΄λΆ€ ν‘œν˜„μ„ λ°”κΏ€ 수 μ—†λ‹€λŠ” λ¬Έμ œκ°€ 있게 λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λͺ¨λ“  ν•„λ“œλ₯Ό private둜 μ„ μ–Έν•΄μ•Ό ν•œλ‹€.

 

5. μžμ‹  μ™Έμ—λŠ” λ‚΄λΆ€μ˜ κ°€λ³€ μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Όν•  수 없도둝 ν•œλ‹€. 🚁

public class Person {

    private final Address address;

    public Person(Address address) {
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }
}

----------

public class Address {

    private String zipCode;

    private String street;

    private String city;

    public String getZipCode() {
        return zipCode;
    }

    public void setZipCode(String zipCode) {
        this.zipCode = zipCode;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

----------

public static void main(String[] args) {
    Address seattle = new Address();
    seattle.setCity("Seattle");

    Person person = new Person(seattle);
    System.out.println(person.getAddress().getCity()); // Seattle

    Address redmond = person.getAddress();
    redmond.setCity("Redmond");
    System.out.println(person.getAddress().getCity()); // Redmond
}

  Person이 아무리 λΆˆλ³€ 클래슀라고 ν•˜λ”λΌλ„ Address λ•Œλ¬Έμ— Person이 κ°€μ§€κ³  μžˆλŠ” λ‚΄λΆ€ 정보가 λ°”λ€Œκ²Œ λœλ‹€. (Seattle β†’ Redmond)

  Address의 λ ˆνΌλŸ°μŠ€κ°€ finalμ΄λΌλŠ” 것이지 Address의 정보듀이 finalμ΄λΌλŠ” 뜻이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

  이λ₯Ό 막기 μœ„ν•΄μ„œλŠ” λ‚΄λΆ€μ˜ κ°€λ³€ μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Όν•  수 없도둝 ν•΄μ•Ό ν•œλ‹€. μ΄λŠ” 방어적 볡사λ₯Ό μ΄μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

public class Person {

    ...

    public Address getAddress() {
        Address copyOfAddress = new Address();
        copyOfAddress.setStreet(address.getStreet());
        copyOfAddress.setZipCode(address.getZipCode());
        copyOfAddress.setCity(address.getCity());
        return copyOfAddress;
    }
}

public static void main(String[] args) {
    Address seattle = new Address();
    seattle.setCity("Seattle");

    Person person = new Person(seattle);
    System.out.println(person.getAddress().getCity()); // Seattle

    Address redmond = person.getAddress();
    redmond.setCity("Redmond");
    System.out.println(person.getAddress().getCity()); // Seattle
}

 

  μ΄μƒμœΌλ‘œ 'λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“œλŠ” λ‹€μ„― κ°€μ§€ κ·œμΉ™'에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μ•˜λ‹€. λ‹€μŒ 글을 톡해

  • λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ ν΄λž˜μŠ€μ˜ μž₯점, λ‹¨μ , λ‹¨μ  λŒ€μ²˜ λ°©λ²•)(2) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]
  • λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ ν΄λž˜μŠ€λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  κ²ƒ)(3) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]

λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

 

ν•΄λ‹Ή 글은 λ°±κΈ°μ„  λ‹˜μ˜ 'μ΄νŽ™ν‹°λΈŒ μžλ°” μ™„λ²½ 곡랡'을 μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

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

λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  것)(3) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]  (0) 2023.04.27
λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀의 μž₯점, 단점, 단점 λŒ€μ²˜ 방법)(2) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]  (0) 2023.04.27
public ν΄λž˜μŠ€μ—μ„œλŠ” public ν•„λ“œκ°€ μ•„λ‹Œ μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ16)]  (0) 2023.04.24
ν΄λž˜μŠ€μ™€ λ©€λ²„μ˜ μ ‘κ·Ό κΆŒν•œμ„ μ΅œμ†Œν™”ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ15)]  (0) 2023.04.12
Comparable을 κ΅¬ν˜„ν• μ§€ κ³ λ €ν•˜λΌ - [3μž₯. λͺ¨λ“  객체의 곡톡 λ©”μ„œλ“œ(μ•„μ΄ν…œ14)]  (0) 2023.04.11
  • 1. 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. πŸš•
  • 2. 클래슀λ₯Ό ν™•μž₯ν•  수 없도둝 ν•œλ‹€. 🚌
  • 3. λͺ¨λ“  ν•„λ“œλ₯Ό final둜 μ„ μ–Έν•œλ‹€. πŸš–
  • 4. λͺ¨λ“  ν•„λ“œλ₯Ό private둜 μ„ μ–Έν•œλ‹€. 🚍
  • 5. μžμ‹  μ™Έμ—λŠ” λ‚΄λΆ€μ˜ κ°€λ³€ μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Όν•  수 없도둝 ν•œλ‹€. 🚁
'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ³ λ €ν•  것)(3) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]
  • λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ(λΆˆλ³€ 클래슀의 μž₯점, 단점, 단점 λŒ€μ²˜ 방법)(2) - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ17)]
  • public ν΄λž˜μŠ€μ—μ„œλŠ” public ν•„λ“œκ°€ μ•„λ‹Œ μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ16)]
  • ν΄λž˜μŠ€μ™€ λ©€λ²„μ˜ μ ‘κ·Ό κΆŒν•œμ„ μ΅œμ†Œν™”ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ15)]
Amenable
Amenable
CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

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

단좕킀

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

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

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

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

λͺ¨λ“  μ˜μ—­

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

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