본문으로 바로가기

[Java] 캡슐화 (Encapsulation)

category Language/Java-backup 2022. 4. 3. 04:28
728x90
반응형
Java를 통해 객체지향 언어를 이해해보는 학습노트입니다

캡슐화?
캡슐화는 한 마디로 "은닉화"라고 생각하시면 됩니다.  일단 하나의 클래스를 예제로 들어보겠습니다.

멤버 변수는 String 형인 name 과 int 형인 id 두 개 밖에 없습니다. 이 클래스의 멤버 변수에 접근하기 위해서는 다음과 같이 접근합니다.

이러한 접근방법은 클래스의 속성을 함부로 변경을 가능하게 만드는 위험성을 가지고 있습니다.

 

 
private로 선언된 멤버변수의 getter ,setter  메서드
밑의 코드는 Student 라는 이름의 클래스입니다. 

 

자세히 들여다 보시면 변수의 접근 제한자가 private로 선언되어있는 것을 확인할 수 있습니다. 그리고 밑의 메서드명에 'set' 과 'get' 이라는 단어가 들어가 있는 걸 확인 가능합니다.

 
'set'이라는 용어가 들어가 있는 메서드는 지난 번 시간에 설명드렸던 'this'라는 키워드를 이용해 매개변수로 받은 값을 Student 클래스의 멤버 변수 값으로 초기화 합니다.
 
'get'이라는 용어가 들어가 있는 메서드는 단순히 멤버 변수의 값들을 리턴하고 있습니다.
 
그리고 Student.java와는 다른 'School.java'라는 파일을 생성해 다음과 같은 코드를 적어줍시다.

 

서두에 언급했듯 인스턴스변수에 접근해서 클래스의 인스턴스 변수를 함부로 변경하지 않고 "Shool.java"가 'set'들어있는 메서드를 통해 "Student.java" 파일의 멤버변수를 변경하고 있습니다.

 

NotePad of "캡슐화"

"캡슐화"라는 것에 대해 정리했습니다. 하지만 궁금증이 생깁니다 "외부에서 아무 변수를 getter 메서드를 이용해 해당 클래스의 멤버변수를 바꾼다면 그게 무슨 의미가 있지?" 일 것 같습니다. 이것은 단지 인스턴변수에 접근하는 방식이 getter 메서드를 이용하는 것으로 바뀐 것 처럼 보일 뿐입니다. 이 부분은 캡슐화의 특징을 생각하시면서 보시길 바랍니다.

 

*캡슐화의 특징

 

객체의 필드(속성), 메소드를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것을 말한다.

외부 객체는 객체 내부의 구조를 얻지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.

필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는데 있다.

자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지를 결정하기 위해 접근 제한자(Access Modifier)를 사용한다.

 

 

 

 

728x90
반응형

'Language > Java-backup' 카테고리의 다른 글

[Java] 상속 (Inheritance)  (0) 2022.04.03
[Java] 생성자 오버로딩  (0) 2022.04.03
[Java] 오버로딩 (OverLoading)  (0) 2022.04.03
[Java] 클래스  (0) 2022.04.03