2023. 2. 27. 16:35γJAVA/Effective JAVA
[μ΄νν°λΈ μλ°] Item17. λ³κ²½ κ°λ₯μ±μ μ΅μννλΌ.
λΆλ³ ν΄λμ€λ?
: κ°λ¨ν λ§ν΄μ κ·Έ μΈμ€ν΄μ€μ λ΄λΆ κ°μ λ³κ²½ν μ μλ ν΄λμ€λ₯Ό λ§νλ€.
λΆλ³ μΈμ€ν΄μ€μ κ°μ§λ μ 보λ κ³ μ λμ΄μ κ°μ²΄κ° νκ΄΄λλ μκ°κΉμ§ μ λ λ¬λΌμ§μ§ μλλ€.
μλ°μμ λΆλ³ν΄λμ€λ String, BigInteger, BigDeciaml λ±μ΄ μλ€.
λΆλ³ ν΄λμ€λ κ°λ³ ν΄λμ€λ³΄λ€ μ€κ³νκ³ κ΅¬ννκ³ μ¬μ©νκΈ° μ¬μ°λ©°, μ€λ₯κ° μκΈΈ μ¬μ§λ μ κ³ ν¨μ¬ μμ νλ€.
λΆλ³ ν΄λμ€ λ§λλ 5κ°μ§ κ·μΉ πΎ
public final class PhoneNumber // ν΄λμ€λ₯Ό νμ₯ν μ μλλ‘ νλ€.
{
private final short areaCode, prefix, lineNum; // λͺ¨λ νλλ₯Ό finalλ‘ μ μΈ, λͺ¨λ νλλ privateμΌλ‘ μ μΈ
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 λ±μ μμ μλ₯Ό μ 곡νμ§ μλλ€.
- ν΄λμ€λ₯Ό νμ₯ν μ μλλ‘ νλ€.
: ν΄λμ€λ₯Ό finalλ‘ μ μΈν΄μ μμμ λ§μ νμ ν¬λμ€μμ λΆμ£Όμνκ² νΉμ λμ μλλ‘ κ°μ²΄μ μνλ₯Ό λ³νκ² λ§λλ μ¬νλ₯Ό λ§λλ‘ νλ€.
- λͺ¨λ νλλ finalλ‘ μ μΈνλ€.
: μμ€ν μ΄ κ°μ νλ μλ¨μ μ΄μ©ν΄μ μ€κ³μμ μλλ₯Ό λͺ ννκ² λλ¬λ΄λ λ°©λ²μ΄λ€. μλ‘ μμ±λ μΈμ€ν΄μ€λ₯Ό λκΈ°ν μμ΄ λ€λ₯Έ μ€λ λλ‘ κ±΄λ€λ λ¬Έμ μμ΄ λμνκ²λ 보μ₯νλλ°λ νμνλ€.
- λͺ¨λ νλλ₯Ό privateλ‘ μ μΈνλ€.
: νλκ° μ°Έμ‘°νλ κ°λ³ κ°μ²΄λ₯Ό ν΄λΌμ΄μΈνΈμμ μ§μ μ κ·Όν΄μ μμ νλ μΌμ λ§μμ€λ€.
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 final class Person
{
private final Address address; // addressκ° κ°λ³ ν΄λμ€λΌλ©΄... Personμ λΆλ³μΌλ‘ λ§λ€μ΄λ κ°μ΄ λ°λμ μλ€.
public Person(Address address)
{
this.address = address;
}
// μμ μΈμλ λ΄λΆμ κ°λ³ μ»΄ν¬λνΈμ μ κ·Όν μ μλλ‘ νλ€.
public Address getAddress()
{
return address;
}
public static void main(String[] args)
{
Address seattle = new Address();
seattle.setCity("Seattle");
Person person = new Person(seattle);
Address redmond = person.getAddress(); // μμ μΈμλ λ΄λΆμ κ°λ³ μ»΄ν¬λνΈμ μ κ·Όν μ μλλ‘ νλ€.
redmond.setCity("Redmond");
System.out.println("person.address.getCity() = " + person.address.getCity());
}
}
- μμ μΈμλ λ΄λΆ κ°λ³ μ»΄ν¬λνΈμ μ κ·Όν μ μλλ‘ νλ€.
: Addressλ κ°λ³ μ»΄ν¬λνΈλΌμ μ무리 Personμ λΆλ³ κ°μ²΄λ‘ λ§λ λ€κ³ νλλΌλ getAddressλ₯Ό ν΅ν΄μ μμ ν μ μλ€.
λ°λΌμ ν΄λμ€μ κ°λ³ κ°μ²΄λ₯Ό μ°Έμ‘°νλ νλκ° νλλΌλ μλ€λ©΄ ν΄λΌμ΄μΈνΈμμ κ·Έ κ°μ²΄μ μ°Έμ‘°λ₯Ό μ»μ μ μλλ‘ ν΄μΌ νλ€.
μ΄λ° νλλ μ λ ν΄λΌμ΄μΈνΈκ° μ 곡ν κ°μ²΄ μ°Έμ‘°λ₯Ό κ°λ¦¬ν€κ² ν΄μλ μλλ©°, μ κ·Όμ λ©μλκ° κ·Έ νλλ₯Ό κ·Έλλ‘ λ°νν΄μλ μλλ€!!
public final class Person
{
private final Address address; // addressκ° κ°λ³ ν΄λμ€λΌλ©΄... Personμ λΆλ³μΌλ‘ λ§λ€μ΄λ κ°μ΄ λ°λμ μλ€.
public Person(Address address)
{
this.address = address;
}
// μμ μΈμλ λ΄λΆμ κ°λ³ μ»΄ν¬λνΈμ μ κ·Όν μ μλλ‘ νλ€.
// public Address getAddress()
// {
// return address;
// }
// μμ μΈμλ λ΄λΆμ κ°λ³ μ»΄ν¬λνΈμ μ κ·Όν μ μλλ‘ νλ€. -> getterκ° νμν κ²½μ°μλ λ°©μ΄μ μΈ λ³΅μ¬
public Address getAddress()
{
Address copyOfAddress = new Address();
copyOfAddress.setCity(address.getCity());
copyOfAddress.setStreet(address.getStreet());
copyOfAddress.setZipCode(address.getZipCode());
return copyOfAddress;
}
public static void main(String[] args)
{
Address seattle = new Address();
seattle.setCity("Seattle");
Person person = new Person(seattle);
Address redmond = person.getAddress(); // μμ μΈμλ λ΄λΆμ κ°λ³ μ»΄ν¬λνΈμ μ κ·Όν μ μλλ‘ νλ€.
redmond.setCity("Redmond");
System.out.println("person.address.getCity() = " + person.address.getCity());
}
}
-> λ°©μ΄μ 볡μ¬λ₯Ό μ¬μ©ν΄μ λΆλ³ κ°μ²΄λ₯Ό μ μ§ν μ μλλ‘ νλ€.