접근 제어자 간단한 코드로 차이점 알기 (public, protected, private) - 개발새발 작성 일기

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

자바 개념

목록 보기
3/15

set을 왜 써야 할까
그리고 접근 제어자란 뭘까

접근 제어자란

자바에서 변수를 사용할 때(접근할 때)의 권한을 정해준 거다

class Animal {
    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을 써야 하는지 의문이 들었다.
set을 안 쓰고 dog.name 해도 될 것 같은데 왜 set을 썼을까

그럼 지워보자

class Animal {
    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 멍멍

코드가 오류나지 않고 컴파일이 가능하다
그러면 왜 굳이 set을 썼을까

얼핏 알기로는 다른 클래스에서 사용하고 변경하기 위해서 써주는 이유라고 했다
그러면 변수 앞에 private를 붙여보자

바로 오류가 한꺼번에 3개나 생겨버렸다.
그러면 이번에는 set을 사용해보자

dog.setName("poppy"); 구문의 오류는 사라졌지만 dog.name으로 사용하는 두가지는 그대로 오류이다

둘의 공통점은 상속을 받는 메서드에서 사용하고 있다는 것인데
그러면 상속까지도 제한을 풀어주는 protected를 사용해보자

다시 한번 정리하자면 private는 자기 class 안에서만, protected는 상속받는 자식 클래스까지, public은 모두 오픈 해주는 메소드이다.

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

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

0개의 댓글