캡슐화

NasK!m_311·2023년 2월 6일
0

Computer Science

목록 보기
5/6
post-thumbnail

💡 캡슐화 (Encapsulation)

객체. 즉 클래스의 내부 변수와 메소드를 하나로 패키징하는 특징이다.

객체에 선언된 변수나 메소드가 구분없이 중구난방으로 접근할 수 있다면 정상적인 객체로 보기 어렵다.

캡슐화와 비슷한 개념으로 정보은닉이라는 개념이 있다.

정보 은닉은 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상요작용하도록 유도한다.

이 두 개념은 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다.

객체의 모듈화가 잘 이루어져있을 경우 모듈 단위의 재사용이 매우 용이하다.

여러 로직에서 중복되는 코드를 모듈로 대처하면 모듈 내부의 소스만 수정하는 것으로 수정사항을 반영할 수 있다.

이는 곧 간편한 유지보수와 직결된다.

  • 모듈 : 소프트웨어 설계에서 기능단위로 분해하고 추상화 되어 재사용 및 공유 가능한 수준으로 만들어진 단위

  • 모듈화 : 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법


💡 캡슐화 사용 이유

-> 변경에 유연한 프로그래밍 작업을 위함.

  • 중복 방지.
  • 편리한 유지보수를 위함.
  • 데이터와 그 데이터를 다르는 메서드로 이루어진 것이 캡슐화이다.

💡접근 제어자를 이용한 캡슐화(encapsulation)

  • 클래스나 멤버, 주로 멤버에 접근제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위해서이다.
  • 데이터가 유효한 값을 유지하도록, 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서
    외부로부터의 접근을 제한하는 것이 중요하다.
  • 이를 데이터 감추기(data hiding)라고 하며, 객체지향개념의 캡슐화(encapsulation)에 해당하는 내용이다.
  • 또 다른 이유는 클래스 내에서만 사용되는, 내부 작업을 위해 임시로 사용되는 멤버 변수나 부분 작업을 처리하기 위한
    메소드 등의 멤버들을 클래스 내부에 감추기 위함이다.
  • 외부에서 접근할 필요가 없는 멤버들은 private으로 지정하여 외부에 노출시키지 않음으로써 복잡성을 줄일 수가 있다.

👀 문제 풀이

내가 낸 문제) 캡슐화는 객체의 ( ) 와 ( ) 을 높임으로써 객체의 ( )를 지향한다.
빈칸을 채워주세요
답: 응집도, 독립성, 모듈화

  • 모듈화 : 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법

문제 1) 좋은 설계는 낮은 응집도와 높은 결합도를 구성하는 것이다 (o,x)
내 답 : x, 이유: 높은 응집도와 낮은 결합도를 구성하는 것이다.(정답)
정답 : x, 높은 응집성 낮은 결합도(의존성의 정도)

문제 2) 객체지향 기법에서 캡슐화에 대한 설명으로 틀린 것은?

1) 캡슐화를 하면 객체 간의 결합도가 높아진다.
2) 캡슐화된 객체들은 재사용이 용이하다.
3) 프로그램 변경에 대한 오류의 파급 효과가 적다.
4) 인터페이스가 단순해진다.
내 답 : 1, 이유: 결합도가 낮아진다.(독립성이 높아짐) (정답)
정답 : 1

문제 3) 정보은닉을 위해서 객체에 있는 데이터와 함수들을 모두 은폐시켜야 한다 (o/x)
그 이유는?
내 답 : x, 이유: 은닉된 데이터에 접근할 수 있는 메서드가 필요하므로 모두 은폐시키면 안된다. (정답)
정답 : x, 객체지향 언어에서 어떤 목적을 달성하기 위해서는 필연적으로 다른 객체와의 협력이 있어야 하기 때문에 객체는 서로 관계를 맺는다.
만약 캡슐(객체) 속에 있는 모든 데이터와 함수들을 모두 은폐시킨다면 해당객체는 외부 다른 객체들과 정보를 주고받을 수 없기 때문에.

문제 4) 정보 은닉의 종류 중 캡슐화는 객체의 ( ) 및 ( )를 은닉하는 것이다.
내 답 : 데이터, 메서드 (오답)
정답 : 속성(멤버 변수), 행위(method)

문제 5) 멤버변수의 경우 보통 ( )접근제어자를 사용하여 외부로부터의 직접적인 접근을 막고
( )를 만들어 사용함으로써 내부 데이터에 제한적 접근을 할 수 있게 한다.
내 답 : private, getter setter (정답)
정답 : private, getter setter

문제 6)
1. class Sepecial 이미지 참고

1-1. Sepecial 클래스는 한 번만 생성하게끔 개발하려고 한다. 이러한 작업을 설계하는 디자인 패턴은?
내 답 : 싱글톤 패턴 (정답)
정답 : singleton pattern

1-2. 1번 이미지는 해당 디자인 패턴이 미적용된 상태이다. 수정해야할 줄번호와 수정된 코드를 쓰시오.
내 답 : 13번줄 / return null;(오답)
정답 : 3번 - private static Sepecial sepecial;
5번 - private Sepecial ( ){ }
9번 - public static getInstance( ) { /내용 /}

  1. class Person 이미지 참고

2-1. Person 클래스의 name을 읽기전용으로 설계한다고 했을 때 작성해야 할 메서드 이름과 접근지정자를 작성하시오
내 답 :
정답 : public, getName

2-2. Person 클래스의 name을 쓰기전용으로 설계한다고 했을 때 작성해야 할 메서드 이름과 접근지정자를 작성하시오
내 답 :
정답 : public, setName

profile
메리아빠, 먹다가 죽어도 되는 개발자.(살뺴자....)

0개의 댓글