simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • null
  • 참조변수
  • controllerTest
  • scanner #next() #nextLine()
  • 컨트롤러
  • 자바프로그래밍
  • 참조타입
  • 자바메모리구조
  • JVM메모리구조
  • 자바프로그램
  • 스프링
  • 404

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

Language/Java

객체지향 언어의 특징 4_캡슐화 (정보 은닉)

2022. 7. 22. 22:54

|  캡슐화 (정보 은닉)

앞에서 상속과 다형성을 이야기할 때, 캡슐화의 원칙에 대해 언급했었다.

- 상속의 단점으로 상위 객체의 정보가 하위 객체에서 노출될 수 있고, 그것은 곧 캡슐화의 원칙을 깨는 것이라고 했다.

- 다형성 또한 instanceof를 통해 부모가 참조하고 있던 실제 자식 인스턴스를 외부에서 노출하면 캡슐화의 원칙이 깨졌다.

여기에서도 유추할 수 있는 캡슐화의 의미는 "정보 은닉"이다.

캡슐화 : 정보를 객체 내부로 숨겨 외부로부터 감추는 것

 

|  접근 제어자와 참조변수

1. 접근 제어자의 UML 표현

- private 자기 자신만 접근 가능
~ default 같은 패키지 내
# protected 상속 또는 같은 패키지 내
+ public 모두가 접근 가능
_ static -

 

- 캡슐화를 이루기 위해서는

  먼저 맴버 변수에 private 접근제어자를 사용하여 외부에서 맴버변수에 접근하지 못하도록 해야한다.

- private의 경우, 파생 클래스의 경우에도 접근이 불가하다.

 

2. 참조변수의 복사

기본 타입의 변수 값을 가져올 때는 call by value라 하여 값을 복사한다.

int x = 10;
int y = x; // y = 10; call by value
int z = x + y; // 20

x값을 y에 줄 때는 값을 복사해서 전달한다. 하지만 참조변수를 쓸 때는 call by reference라 하여 값을 복사하지 않는다.

// list1과 list2는 모두 같은 곳을 가리킨다
List<Integer> list1= new ArrayList();
list2 = list1;

참조변수는 포인터, 곧 주소를 담고 있는 변수이고, 그 주소는 실제 값이 저장되어 있는 메모리 공간을 의미한다.

그렇기에 포인터 = 가리킨다, 라는 말을 사용한다. 

 

|  캡슐화와 응집도

- 캡슐화가 되려면 앞서서 "실질적인 정보 은닉"이 이루어져야한다.

- 위에서 배운 접근제어자 private과 게터/세터를 사용하면 아래와 같이 클래스를 만들 수 있다.

public class User{

    private String name;
    
    public String getName(){ 
    	return this.name;
    }
    
    public String setName(String name){
    	this.name = name;
    }
}

- 응집도는 정보은닉에서 더 나아간 개념으로, 하나의 모듈은 하나의 기능을 수행하는 것을 의미한다.

- 응집도에 대한 자세한 내용 : https://computer-science-student.tistory.com/140

 

|  캡슐화의 장점

장점 불필요한 부분을 은닉하여, 사용자가 오용하지 않게 방지한다.
객체의 내부가 변경되어도, 사용법이 바뀌거나 다른 객체에 영향을 주지 않는다. (낮은 결합도)
큰 시스템일지라도 컴포넌트별로 작게 분리하여 개발이 가능하다. 
캡슐화를 하게 되면 개발 속도를 높이고 성능을 최적화할 수 있다.

 

 

[참조]

스프링 입문을 위한 자바 객체 지향의 원리와 이해

https://mangkyu.tistory.com/195

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=knix008&logNo=220699796327 

https://siyoon210.tistory.com/33

https://bperhaps.tistory.com/entry/%EC%BA%A1%EC%8A%90%ED%99%94%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EC%96%B4%EB%96%A4-%EC%9D%B4%EC%A0%90%EC%9D%B4-%EC%9E%88%EB%8A%94%EA%B0%80

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

JAVA 라이브러리 - 날짜, 시간 관련 클래스(java.util/java.time..)  (0) 2022.08.10
JAVA 라이브러리 - Java.lang 패키지  (0) 2022.08.08
객체지향 언어의 특징 3_다형성 (사용 편의성)  (0) 2022.07.22
객체지향 언어의 특징 2_상속 (재사용 + 확장)  (0) 2022.07.20
객체지향 언어의 특징 1_추상화 (모델링)  (0) 2022.07.20
    'Language/Java' 카테고리의 다른 글
    • JAVA 라이브러리 - 날짜, 시간 관련 클래스(java.util/java.time..)
    • JAVA 라이브러리 - Java.lang 패키지
    • 객체지향 언어의 특징 3_다형성 (사용 편의성)
    • 객체지향 언어의 특징 2_상속 (재사용 + 확장)
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바