@setter 사용 유무 결과 비교 - 개발새발 작성 일기

개발새발자·2023년 10월 28일
1

자바 개념

목록 보기
4/15
class Animal {
    protected String name;
    void setName(String name) {
        this.name = name;
    }
}

class Dog extends Animal {
    void onomatopoeia() { 
        System.out.println(name+" 멍멍");
    }
}

public class SampleInheritance {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.onomatopoeia();
    }
}

poppy
poppy 멍멍

이렇게 코드 내에서 set을 사용해서 접근제어자로 제한둔 것을 임의로 풀 수 있다
이는 어노테이션 @setter을 사용하는 것과 동일한데

import lombok.Setter;

@Setter
class Animal {
    protected String name;
}

class Dog extends Animal {
    void onomatopoeia() {
        System.out.println(name+" 멍멍");
    }
}

public class SampleInheritance {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.onomatopoeia();
    }
}

poppy
poppy 멍멍

setName 메서드를 지워도 컴파일 오류가 나지 않고 setName을 사용할 수 있다

그러면 여기서 의문이 생긴다
그냥 dog.name 을 사용하면 안되나

해보자

import lombok.Setter;

@Setter
class Animal {
    protected String name;
}

class Dog extends Animal {
    void onomatopoeia() {
        System.out.println(name+" 멍멍");
    }
}

public class SampleInheritance {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "poppy";
        System.out.println(dog.name);
        dog.onomatopoeia();
    }
}

poppy
poppy 멍멍

이 또한 컴파일 오류가 나지 않고 가능하다

(상속에 대해 추가적으로 알고 싶다면 아래 링크를)
https://velog.io/@t0de4r55/05-05-상속

profile
바삭하고 촉촉한 쿠키로 살자

0개의 댓글