본문 바로가기
언어공부/JAVA&SPRING

[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 4회차 미션

by hobbiz 2020. 8. 13.
반응형

 

오늘은 정보 은닉, 캡슐화에 대한 강의를 들어보았다.

 

private 접근제어자를 사용하여 선언한 변수를

다른 클래스에서 Getter, Setter를 이용하여 간접적으로 가져와서 쓸 수 있는 방법이다.

 

 

 

 

 

<추가 공부>

 

캡슐화

출처: https://terms.naver.com/entry.nhn?docId=3532995&cid=58528&categoryId=58528&expCategoryId=58528

 

'캡슐' 하면 [그림 6-30(a)]와 같은 캡슐로 된 약이 먼저 떠오를 것이다. 캡슐 약 안에는 수많은 알갱이가 들어 있지만 약을 복용할 때는 알갱이 하나하나가 어떤 기능을 하는지 알 수도 없고 알 필요도 없다. 어디가 아플 때 먹는 약인지, 얼마나 먹어야 하는지, 약의 효능은 무엇인지 등만 알고 있으면 된다. 마찬가지로 세탁기 등의 전자 제품도 그 기능과 사용법만 알면 된다. 내부가 어떻게 구성되어 있으며, 어떤 방식으로 돌아가는지 전혀 신경 쓸 필요가 없다.

그림 6-30 캡슐화

(a) 실세계의 캡슐화

(b) 객체지향의 캡슐화데이터와 메서드는 항상 함께 따라 다닌다.

객체지향에서도 캡슐화(encapsulation)는 사용자들에게 해당 객체의 기능(서비스)과 사용법만 제공하고 내부는 감추어(변경할 수 없게 함) 쉽게 사용할 수 있게 하는 개념이다. [그림 6-30(b)]와 같이 소프트웨어 모듈인 객체 내부에 서로 관련된 데이터와 그 데이터를 조작할 수 있는 메서드를 같이 포장하는 방식으로, 그 안에 포함된 메서드만 사용하여 데이터 값을 변경할 수 있는 구조이다. 이러한 캡슐화는 클래스를 사용하여 정의하는데, 일종의 '블랙박스'와 같다. 즉 캡슐화는 클래스를 사용하여 서로 관련된 정보와 처리 방식을 같이 묶고, 외부에는 감추어두는 것이다.

캡슐화의 효과를 예를 들어 설명해보겠다. 여기 서류가 담긴 커다란 파일 박스(모듈)가 있다고 생각해보자. 기존 방법으로 서류를 찾으려면 서류가 담긴 파일 박스의 구조(모듈의 자료구조)를 잘 알고 있어야 한다. 또 서류를 파일 박스에 넣을 때도 실수로 엉뚱한 곳에 넣으면(데이터 값 변경) 다음에 찾을 때 어려움을 겪을 것이다. 이처럼 서류를 찾고 넣는 과정의 책임이 모두 사용자(프로그래머)에게 있어 사용자의 책임이 크다.

반면, 객체지향 방법으로 서류를 찾고 넣는다면 파일 박스(모듈)에서 사용자가 직접 찾고 넣는 행위가 금지되고 관리자(메서드)가 그 일을 맡아서 할 것이다. 사용자는 파일 박스의 구조를 알 필요가 없어 부담이 줄어준다. 또 사용자가 엉뚱한 곳에 서류를 넣는 실수도 없어진다(데이터에 직접 접근 불가능). 파일 박스의 구조가 확장되거나 변경되어도 관리자가 파악(메서드만 데이터 값을 변경)하고 있으면 되므로 사용자는 필요한 서류가 무엇인지(모듈의 기능) 정도만 알고 있으면 된다.

이처럼 객체지향 방식은 사용자가 모듈의 내부 구조를 알 필요도 없고 변경할 수도 없다. 어떤 기능을 하고, 어떻게 사용하는지만 알면 된다. 따라서 캡슐화를 통해 다음과 같은 장점을 얻을 수 있다.

• 데이터 보호 : 이용자가 데이터에 직접 접근하는 것을 차단하므로 객체 내 데이터 및 코드의 손상과 오용을 막고 안전하게 보호할 수 있다.
• 추상화 용이 : 추상화를 통해 프로그래밍 문제를 쉽게 개념화할 수 있다.
• 제공자와 이용자를 명확히 분리 : 객체 제공자와 객체 이용자(외부 객체)의 분담을 명확히 할 수 있다.
• 이용자에게 편리성 제공 : 메서드의 구현 방법이 바뀌어도(예, 버블 정렬이 퀵 정렬로 바뀜) 이를 사용하는 데 어려움이 없다.
• 사용법이 쉬움 : 세탁기 버튼의 기능만 알면 사용할 수 있는 것처럼, 메서드의 기능만 알면 객체를 사용할 수 있다.
• 변화에 대한 국지적 영향 : 객체 내의 데이터 구조가 바뀌어도 다른 객체에는 영향을 주지 않는다.
• 객체 간의 독립성 보장 : 캡슐화(데이터+메서드)로 인해 객체 사이의 독립성이 구조적으로 보장된다.
• 변경 용이성과 재사용성 증대 : 설계의 변경 용이성과 재사용성을 높여준다.

[네이버 지식백과] 캡슐화 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 김치수)

 

 

정보은닉

출처: https://terms.naver.com/entry.nhn?docId=3532996&cid=58528&categoryId=58528

 

 

일상에서 정보은닉(information hiding)의 예를 먼저 살펴보자. 가끔은 동성이나 이성 친구가 무슨 생각을 하고 있는지 궁금할 때가 있다. 그러면 여러분은 어떻게 하는가? 그 사람의 머릿속을 환히 들여다볼 수는 없으므로 많은 대화를 통해 그 친구의 생각을 알아내는 수밖에 없다. 정보은닉은 이처럼 외부(다른 객체)에서 객체의 내부(데이터)를 들여다볼 수 없다는 개념이다. 다른 객체가 한 객체 내의 데이터 값을 직접 참조하거나 접근할 수 없으므로 마치 친구끼리 대화를 하듯 메서드를 통해 객체에 요청해서 값을 넘겨받아야 한다.

그림 6-31 정보은닉의 일상 예

캡슐화는 소프트웨어 모듈인 객체 내부의 관련된 데이터와 메서드를 함께 포장하는 방식으로, 캡슐 내부와 외부를 구별 짓는다. 그러나 캡슐화했다고 해서 그 자체로 내부의 정보가 외부에 숨겨지지는 않는다.

이것을 해결할 수 있는 방법이 정보은닉의 원리이다. 정보은닉은 한 모듈에서 인터페이스와 구현을 명확히 분리하여 각 모듈의 내부 항목에 관한 정보는 감추고, 인터페이스를 통해서만 메시지를 전달함으로써 다른 모듈을 변경하지 못하도록 한다. 즉 모듈 안에 있는 자료구조와 메서드에 사용된 알고리즘은 외부에서 그 값을 직접 변경할 수 없고, 공개 인터페이스로 정의된 메서드를 통해서만 접근할 수 있다.

공개 인터페이스는 외부 객체와 정보를 주고받기 위한 통로로, 다른 객체에 무엇을 서비스해줄 수 있는지 알려준다. 이는 세탁기, TV 같은 전자 제품에서 버튼과 같은 역할이다.

정보은닉은 [표 6-3]과 같이 프로그래밍 언어별로 표기하는 방법이 다르다.

표 6-3 프로그래밍 언어별 정보은닉의 표기 방법

표 6-3 프로그래밍 언어별 정보은닉의 표기 방법구분UMLC++자바

공개

+

public

public

부분 공개

#

protected

protected

은닉

-

private

private

그림 6-32 정보은닉의 표기

[그림 6-32]의 figure 클래스에서 속성에 표기된 -와 +, #의 의미는 다음과 같다.

• 공개(+, public) : public으로 설정된 요소들은 같은 시스템에 있는 모든 클래스가 접근할 수 있다. 클래스는 클래스 이름, 속성, 메서드로 구성되는데, public으로 설정되는 부분은 대부분 메서드이다.

• 은닉(-, private) : private으로 설정된 요소들은 같은 시스템 내의 다른 클래스는 직접 접근할 수 없고, 해당 클래스의 메서드를 통해서만 접근할 수 있다. 클래스에서 대부부의 속성은 private으로 설정된다.

• 부분 공개(#, protected) : protected로 설정된 요소들은 다른 클래스가 접근할 수 없고, 해당 클래스의 메서드와 이 클래스를 상속받은 하위 클래스만 접근할 수 있다.

정보은닉의 특징은 다음과 같다.

• 블랙박스 역할 : 정보은닉은 블랙박스처럼 데이터와 메서드를 숨기는 장치로, 객체의 사용자와 제공자의 역할을 명확히 분리해준다.

• 인터페이스를 통한 접근 : 사용자가 공개 인터페이스를 사용함으로써 객체 내부의 자료구조를 몰라도 객체를 쉽게 이용할 수 있다. 즉 사용자는 모듈의 구현 형태(삽입 정렬, 버블 정렬 등)를 몰라도 인터페이스를 통한 사용법만 알면 쉽게 이용할 수 있다.

• 자료구조 변경이 용이 : 제공자가 객체 내부의 자료구조를 변경해도(버블 정렬을 퀵 정렬로 변경) 그 객체와 인터페이스를 통해 통신하는 사용자에게는 영향을 주지 않으므로 부담 없이 자료구조를 변경할 수 있다. 즉 사용자는 인터페이스만 바뀌지 않는다면 호출하는 모듈은 종전대로 사용할 수 있다.

정보은닉의 개념을 적용하여 모듈을 설계하면 다음과 같은 장점을 얻을 수 있다. 객체지향의 장점과 유사한데, 이는 객체지향을 정보은닉의 개념을 사용해 구현하기 때문이다.

• 독립성 향상 : 다른 모듈과 관계가 적어 모듈의 독립성을 높여준다.

• 수정 용이 : 기능을 중심으로 하는 프로세스 지향 방식에서는 다른 모듈에 미치는 영향을 충분히 검토한 후에 모듈을 수정해야 한다. 그러나 객체지향의 정보은닉 개념을 적용하면 인터페이스가 바뀌지 않는 한 다른 모듈에 미치는 영향을 고려할 필요가 없다.

• 이해도 증진 : 프로그램을 개발할 때 다른 모듈의 구현 내용을 자세히 알 필요 없이 제공하는 기능만 알면 메시지를 통해 사용할 수 있어 프로그래머가 모듈을 이해하기가 쉽다.

• 확장성 증가 : 모듈 내의 데이터와 알고리즘을 변경하기 쉬워 기능을 추가하기도 쉽다.

[네이버 지식백과] 정보은닉 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 김치수)

 

 

 

 

 

 

 

 

https://bit.ly/3ilMbIO

 

Java 웹 개발 마스터 올인원 패키지 Online. | 패스트캠퍼스

자바 기초문법부터 프로젝트 실습까지 Java 문법부터 스프링/스프링부트, 트렌디한 기술인 JPA까지 모두 배우는 온라인 강의입니다.

www.fastcampus.co.kr

 

반응형

댓글