λΆλ³ ν΄λμ€λ μΈμ€ν΄μ€μ λ΄λΆ κ°μ μμ ν μ μλ ν΄λμ€λ₯Ό λ§νλ€. λΆλ³ μΈμ€ν΄μ€μ κ°μ§λ μ 보λ κ³ μ λμ΄ κ°μ²΄κ° νκ΄΄λ μκ°κΉμ§ μ λ λ¬λΌμ§μ§ μλλ€.
λΆλ³ ν΄λμ€λ κ°λ³ ν΄λμ€λ³΄λ€ μ€κ³νκ³ κ΅¬ννκ³ μ¬μ©νκΈ° μ¬μ°λ©°, μ€λ₯κ° μκΈΈ μ¬μ§λ μ κ³ ν¨μ¬ μμ νλ€λ μ΄μ μ΄ μλ€.
μμ΄ν 17μμλ μλ 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)]
λν΄μ μμ보μ.
ν΄λΉ κΈμ λ°±κΈ°μ λμ 'μ΄νν°λΈ μλ° μλ²½ 곡λ΅'μ μ°Έκ³ νμμ΅λλ€.