접근제어 Access Modifier
객체는 상호간 접근을 제어할 수 있어야 한다.
왜?
객체의 행위정보는 상호작용을 해야하기 때문에 접근을 허용한다.
정보은닉: 객체의 상태정보는 중요하기 때문에 접근을 못하게 해야한다.
ex)
public int age;
나이라는 상태정보를 999 이렇게 저장해두면 곤란하다
하지만 public 상태이기 때문에 이런 일이 일어날 수 있다.
그래서 접근제한자를 설정해 아무나 바꾸지 못하게 설정해야 한다.
누군가 클래스를 써야 의미가 있기 때문에 클래스의 접근 제한자는 Public 으로 설정한다.
클래스 안 멤버들을 public, private 으로 설정한다.
상태정보 (나이,이름, 전화번호 등..) 는 보통 private 으로 설정하는 것이 기본이다.
메서드는 (play(), eat() 등..) 다른 클래스에서 호출하고 상호작용해야하기 때문에 public 으로 설정하는게 일반적이다.
접근제어란
객체 상호간에 접근을 제어하는 방법이다. (클래스 상호간)
4가지의 접근 제한자를 사용한다.
클래스 설계시 고려해야 한다.
클래스와 클래스 내부에서 만들어지는 멤버에 접근제한자를 사용할 수 있다.
public : 패키지 위치 상관 없이 무조건 접근 가능하다
private : 패키지 위치 상관 없이 무조건 접근 불가하다
protected: 패키지 상관 없이 a와 b가 부모자식 관계가 아니라면 접근 할 수 없다 (하위 클래스를 자식이라고 하고 상위 클래스를 부모라고 한다.)
default : 같은 패키지 안에서 접근 가능하다. 다른 패키지에선 접근하지 못한다
default패키지 안에 있는 클래스들은 기본적으로 디폴트 접근 권한을 가지고 있다.
MemberDTO
public class MemberDTO {
public String name;
private int age;
public String phone;
public void play(){
System.out.println("play");
}
}
MemberDto모델은 public 을 사용한다. 그래야 접근해 사용할 수 있다.
클래스 안 멤버들은 조정 가능.
private int age; // 이를 정보은닉이라고 한다. 다른 곳에서, 패키지 유무와 상관없이 접근하지 못한다.
dto.age =12; 는 에러가 난다. 접근을 못하게 막아놨으니까
그럼 정보를 어떻게 넣지?
같은 MemberDTO 클래스 안에 메소드를 하나 만들어 외부로부터 값을 받아 저장하는 방법이 있다.
유효한 값이 입력되면 할당한다.
패키지란?
서로 기능이 비슷한 클래스들기리 모아 관리를 쉽게 하기 위해 사용
ex) DTO package, DAC package
패키지 외부에서 클래스의 접근을 할 수 없도록 하기 위해
자바에서 제공해주는 API도 패키지의 형태로 배포됨
ex) java.lang, java.io, java.util
패키지를 사용하려면
상단에
import fc.java.model.PersonVO;
import java.util.*; 과 같이 해주어야 한다.
'JAVA > Bootcamp 자바' 카테고리의 다른 글
자바 기초: 변수? 객체? 클래스? 메서드? (0) | 2024.02.22 |
---|---|
VO class, 메서드 오버로딩, toString() (0) | 2024.02.22 |
메서드와 변수 (0) | 2024.02.21 |
연산자 (0) | 2024.02.21 |
객체와 클래스, 배열 (0) | 2024.02.21 |