본문 바로가기

Java

접근 제한자 ,Getter/Setter

접근제한자 

접근제한자란 무엇인가 말 그대로 접근을 제한하는 아이들이다. 

지금까지 우리는 라이브러리 클래스를 만들고 외부에서 객체를 만들어 사용했다 앞으로도 그렇꺼고

근대 마냥 좋다고 외부에서 쓰고읽을수 있게만 만들어야 할까>?

바뀌면 안되는 필드, 읽으면 안되는 메소드가 있진 않을까?

그것을 위해 접근 제한자를 사용한다. 

접근제한자는 클래스, 클래스 멤버(필드, 생성자, 메소드)에 사용가능하다. 

-다른 패키지에서 클래스를 호출하지 못하도록 한다. (클래스 제한)

-객체 생성을 불가능하게 한다. (생성자 제한)

-특정 필드.메소드를 숨김처리한다. (필드/메소드 제한)

접근제한이 강한 순서는

public -> protected -> default -> private 

오른쪽으로 갈수록 제한범위가 강해진다.

public : 클래스, 필드.생성자,메소드 에 적용가능      범위 : 모든 곳에서 접근이 가능하다.

protected : 필드.생성자. 메소드 에 적용가능           범위 : 자식클래스(같은 패키지의), 클래스에서 접근이 가능

default : 클래스, 필드,생성자, 메소드 에 적용가능    범위 : 같은 패키지 내의 클래스에서 접근 가능

private : 필드, 생성자, 메소드 에 적용가능             범위 : 모든 외부 클래스에서 접근 불가


Getter / Setter

실제 프로젝트를 진행 할 때 필드는 private으로 보호한다.  하지만 필드의 값을 외부에서 읽고 쓸 수는 있어야하는데 이 때 

필드의 값을 보호하면서 읽고 쓸 수 있도록 Getter/Setter를 사용한다. 

간단히 말하면 

- 읽기전용 필드가 있다면 (Getter)

Getter가 필드를 참조하고 외부에서 Getter를 참조하면 읽기전용으로 필드에 접근이 가능하다. 

Ex)

public className{

private int speed;

public int getSpeed(){

return speed;

};

}

Getter의 이름은 get필드명(){} // is필드명 (){} 으로 하는 것이 보통이다. 

is필드명은 필드의 타입이 boolean 일때 사용한다.

-외부에서 함부로 값을 넣지 못하도록 하고싶다 (Setter)

Setter의 가장 큰 목적인 유효성 검사를 이야기 하는것 만약 정수만 들어가야하는 필드에 실수를 넣는 것을 방지하기 위해 Setter를 사용해 제대로 된 값인지 검사하는것.

 ex)

private int speed;

public void setSpeed(int speed){

this.speed = speed;

}

위와 같이 Setter는 항상 필드명 앞에 set을 붙여준다. 

그리고 타입은 언제나 void 매개변수 타입을 필드와 동일하게 만든다. 




'Java' 카테고리의 다른 글

메소드 재정의(Override)와 몇가지..  (0) 2018.12.12
상속이란?  (0) 2018.12.05
정적인 자식 Static  (0) 2018.11.21
메소드와 인스턴스멤버, this.  (0) 2018.11.19
자바 개발환경 구축  (0) 2018.10.09