πŸ€” 고민점

getter와 setterλŠ” 어디에 λ‘λŠ” 게 μ’‹μ„κΉŒ?

dev_writer 2023. 11. 15. 11:13

이 λ‚΄μš©μ€ μ½”λ“œ 리뷰 μŠ€ν„°λ””λ₯Ό ν–ˆλ˜ λ‹Ήμ‹œ λ²¨λ‘œκ·Έμ— μž‘μ„±ν–ˆμ—ˆλ˜ λ‚΄μš©μž…λ‹ˆλ‹€.


Getter와 Setter

ν”νžˆ ν΄λž˜μŠ€κ°€ κ°€μ§€κ³  μžˆλŠ” ν•„λ“œκ°’λ“€μ„ κ°€μ Έμ˜€κ±°λ‚˜ μ„€μ •ν•  λ•Œ μ“°μ΄λŠ” λ©”μ„œλ“œλ“€μ„ 각각 Getter, Setter λ©”μ„œλ“œλΌ ν•©λ‹ˆλ‹€. λ˜λŠ” μ ‘κ·Ό μ œμ–΄μžλΌκ³  ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.

public class Car {

    private static final int START_DISTANCE = 0;
    private static final int ACCELERATE_MINIMUM_VALUE = 4;
    private static final int ACCELERATE_MAXIMUM_VALUE = 9;
    
    private final Name name;
    private int distance;
    
    private Car(final Name name, final int distance) {
        this.name = name;
        this.distance = distance;
    }
    
    public static Car createDefault(Name name) {
        return new Car(name, START_DISTANCE);
    }
    
    // 기타 λ©”μ„œλ“œλ“€
    
    // μžλ™μ°¨ κ²½μ£Ό λ―Έμ…˜μ—μ„œλŠ” getter만 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
    public String getName() {
        return name.getName();
    }
    
    public int getDistance() {
        return this.distance;
    }
    
    // 기타 λ©”μ„œλ“œλ“€: 즉, getterκ°€ 맨 μ•„λž˜κ°€ μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

그런데 getter λ©”μ„œλ“œ (setter 포함)λŠ” 클래슀의 맨 μ•„λž˜μ— λ‘λΌλŠ” 리뷰λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€. μ™œ μ΄λ ‡κ²Œ λ§μ”€ν•˜μ…¨λŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ»¨λ²€μ…˜μœΌλ‘œ μ •μ˜λ˜μ–΄ μžˆλŠ”κ°€?

사싀 많이 μ°Έκ³ ν–ˆλ˜ ꡬ글 μžλ°” μ»¨λ²€μ…˜μ΄λ‚˜, 클린 μ½”λ“œ (Clean Code) μ±…μ—λŠ” getter, setterλ₯Ό 맨 μ•„λž˜μ— λ‘λΌλŠ” λ‚΄μš©μ€ μ—†μŠ΅λ‹ˆλ‹€.

μ»¨λ²€μ…˜μ€ μ—†μ§€λ§Œ, κ΄€λ‘€μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

그런데 μŠ€νƒμ˜€λ²„ν”Œλ‘œμš° 글을 보면, λ§Žμ€ μ‚¬λžŒλ“€μ΄ getter와 setterλ₯Ό 관둀상 μ•„λž˜μ— 둠을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Not sure if there is universally accepted standard but my own preferences are;

- constructors first
- static methods next, if there is a main method, always before other static methods
- non static methods next, usually in order of the significance of the method followed by any methods that it calls. This means that public methods that call other class methods appear towards the top and private methods that call other class methods appear towards the top and private methods that call no ohter methods usually end up towards the bottom
- standard methods like toString, equals and hashcode next
- getters and setters have a special place reserved right at the bottom of the class

μ •ν™•ν•œ 이유

μ»¨λ²€μ…˜μœΌλ‘œ 이루어진 게 μ—†λŠ”λ° μ™œ μ‚¬λžŒλ“€μ΄ 맨 μ•„λž˜μ— λ‘λŠ” 것인지 κΆκΈˆν•˜μ—¬ 더 μ—¬μ­€λ΄€λ”λ‹ˆ, μ•„λž˜ 이유λ₯Ό 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

  • getter 같은 뢀뢄은 μ“°λŠ” 일이 많고 μ•ˆ μ“Έ 수 μžˆλ‹€λ©΄ μ§€μ–‘ν•˜λŠ” 편이 μ’‹κΈ° λ•Œλ¬Έμ— λͺ…μ‹œμ μœΌλ‘œ μ•„λž˜μ— μœ„μΉ˜ν•œλ‹€.
  • λΆˆν•„μš”ν•œ getterλŠ” μ—†μ• κΈ° μœ„ν•΄μ„œ μ•„λž˜μͺ½μ—μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

μΆ”κ°€ μ°Έκ³ : 클린 μ½”λ“œμ—μ„œμ˜ 클래슀 체계 ꢌμž₯μ•ˆ

클린 μ½”λ“œμ—μ„œ μž‘μ„±λœ 클래슀 체계λ₯Ό 보면, λ‹€μŒκ³Ό 같이 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

클래슀λ₯Ό μ •μ˜ν•˜λŠ” ν‘œμ€€ μžλ°” 관둀에 λ”°λ₯΄λ©΄, κ°€μž₯ λ¨Όμ € λ³€μˆ˜ λͺ©λ‘μ΄ λ‚˜μ˜¨λ‹€. 정적 (static) 곡개 (public) μƒμˆ˜κ°€ μžˆλ‹€λ©΄ 맨 μ²˜μŒμ— λ‚˜μ˜¨λ‹€. λ‹€μŒμœΌλ‘œ 정적 λΉ„κ³΅κ°œ (private) λ³€μˆ˜κ°€ λ‚˜μ˜€λ©°, μ΄μ–΄μ„œ λΉ„κ³΅κ°œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ λ‚˜μ˜¨λ‹€. 곡개 λ³€μˆ˜κ°€ ν•„μš”ν•œ κ²½μš°λŠ” 거의 μ—†λ‹€.
λ³€μˆ˜ λͺ©λ‘ λ‹€μŒμ—λŠ” 곡개 ν•¨μˆ˜κ°€ λ‚˜μ˜¨λ‹€. λΉ„κ³΅κ°œ ν•¨μˆ˜λŠ” μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” 곡개 ν•¨μˆ˜ 직후에 λ„£λŠ”λ‹€. 즉, 좔상화 단계가 순차적으둜 λ‚΄λ €κ°„λ‹€. κ·Έλž˜μ„œ ν”„λ‘œκ·Έλž¨μ€ μ‹ λ¬Έ κΈ°μ‚¬μ²˜λŸΌ μ½νžŒλ‹€.

 

λΉ„κ³΅κ°œ ν•¨μˆ˜μ™€μ˜ μœ„μΉ˜ μΆ©λŒμ„ ν”Όν•˜κΈ° μœ„ν•΄, μ ‘κ·Ό μ œμ–΄μž ν•¨μˆ˜λŠ” 맨 μ•„λž˜μ— μœ„μΉ˜ν•˜κ³  κ·Έ μ΄μ™Έμ˜ 곡개 ν•¨μˆ˜λŠ” λͺ¨λ‘ κ·Έ μœ„μ— μž‘μ„±ν•˜λ„λ‘ ν•΄μ•Όκ² λ‹€λŠ” 생각을 ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

λΆ€μ‘±ν•˜κ±°λ‚˜ 보완할 점이 μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λŒ“κΈ€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€!