본문 바로가기
프로그래밍/Java-문법정리

【OOP】03_캡슐화

by 코이킹 2022. 1. 16.
반응형

안녕하세요 코이킹입니다.

 

이번 포스트에선 캡슐화에 대해서 설명하겠습니다. 

 


1. 캡슐화란?

 캡슐화란 관련된 데이터와 행위를 묶어 '클래스'라는 '캡슐'에 담아 넣는 것을 의미합니다.
사실 클래스를 만들때 무의식적으로 캡슐화를 하고 있었던 것이라고 할 수 있습니다. 

2. 캡슐화의 이유

1) 코드의 활용·관리 

예를들어 강아지 클래스에 날개 속성을 정의한다면,  강아지 클래스에 날개 속성이 있다고 생각하기는 어렵지 않을까요?

관계없는 속성과 매서드는 제대로 활용되고·관리되기가 어렵습니다. 
관련이 있는 것들만 클래스라는 캡슐에 모아둔다면 소스코드를 재활용하고 관리하기가 한결 수월해질 것입니다. 

2) 정보은닉 

 클래스안에 모아둔 멤버 변수와 메서드를 어느 곳에서 나 불러낼 수 있다면 클래스의 원래 설계된 의도대로 동작하지 않을 가능성이 높습니다. 이것을 방지하기위한 특성이 정보은닉입니다. 
어느 곳에서나 멤버 변수와 메서드를 불러낼 수 있는 것이 아니라 필요한 곳에서 정해진 방법으로만 불러낼 수 있게 되면 원래 클래스의 설계 의도대로 동작할 가능성이 높아집니다. 
자바에서는 정보은닉을 접근제어 지시자를 통해 구현할 수 있습니다. 

 

 ※ 접근제어 지시자
  (1) public : 클래스, 생성자, 변수, 메서드에 정의 가능; 모든 곳에서 접근 가능

  (2) default : 접근제어 지시자를 선언하지 않은 상태; 같은 패키지 내에서만 접근 가능 
  (3) private : 생성자, 변수, 메서드에 정의 가능; 선언된 클래스 내부에서만 접근 가능
  (4) protected : 생성자, 변수, 메서드에 정의 가능; 같은 패키지 내부 OR 상속받은 클래스 

 

public class Main {
	
	public static void main(String[] args) {
		Dog dog = new Dog("Mary", 200, "Akita");
		Bird bird = new Bird("Wings", "Long-beak");
		
		// public 
		System.out.println("Dog's Name : " + dog.name); // 접근 O
		
		// default
		//System.out.println("Dog's hp : " + dog.hp);     // 같은 패키지가 아니므로 접근 X
		
		// private
		// System.out.println("Bird's wing : "+bird.wing); // private이므로 접근할 수 없음
		 System.out.println("Bird's wing : "+bird.getWing()); // get메서드를 사용하여 접근 O
		
		// protected
		System.out.println("Bird's beak : "+bird.beak); // 같은 패키지 이므로 접근 O
		
	}

}

※ 예제 코드

https://github.com/leeyoungseung/algorithmBasic/tree/master/algorithm/src/objective/basic03

 

※ qiita에 투고한 URL

https://qiita.com/Koiking-L/items/6a0d328ca4cfcf67a94e

반응형

'프로그래밍 > Java-문법정리' 카테고리의 다른 글

【OOP】05_다형성  (0) 2022.01.20
【OOP】04_상속  (0) 2022.01.18
【OOP】02_멤버변수·메서드·생성자  (0) 2022.01.15
【OOP】01_객체・클래스・인스턴스  (0) 2022.01.10
【Java문법】예외처리  (0) 2022.01.10

댓글