키보드워리어

【자바】캡슐화의 기본이해 - 1 본문

JAVA/입문

【자바】캡슐화의 기본이해 - 1

꽉 쥔 주먹속에 안경닦이 2022. 11. 7. 10:18
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

오늘은 자바에서 중요한 개념인 캡슐화에 대해 알아보겠습니다.

 


 

 

자바 캡슐화란

 

캡슐화 | Encapsulation

 

이전 포스팅한 MotorBike 클래스의 문제가 있습니다.

2022.11.05 - [JAVA 완전정복!!/JAVA section 8] - 【자바】객체지향 프로그래밍

 

【자바】객체지향 프로그래밍

안녕하세요 【키보드 워리어】 ⌨🗡🧑 블로그 방문자 여러분, 안경닦이입니다. 구조적 프로그래밍과 객체지향 프로그래밍의 차이점에 대해 살펴보고 객체의 측면에서 생각하는 법을 살펴보

keyboardwarrior.tistory.com

 

그것은 MotorBikeRunner 클래스가 직접적으로 MotorBike의 인스턴스 변수에 접근할 수 있다는 것인데

이건 별개의 클래스이기 때문에 좋지 않습니다.

 

엄연히 따지면 독립적인 또 하나의 클래스인 것이 중요한 데이터가 있는 클래스의 내부 변수에 접근하고 있죠.

 

이것은 캡슐화를 파괴하는 행위입니다.

 

캡슐화: Encapsulation is the concept that only this class should have access to the data(state) inside the specific class

캡슐화란 오직 특정한 클래스만 내부의 데이터에 접근할 수 있어야 한다는 개념입니다.

 

 

다른 클래스는 이 데이터에 접근하려면 해당 클래스의 동작(behaviour)인 메소드를 통해야 합니다.

 

이전 포스팅에서 우리는 motorbike의 상태를 외부에서 (runner클래스) 제어했습니다. 이제 이 변수를 비공개로 전환해봅니다.

 

speed변수를 private로 전환

speed 변수를 private로 바꾸었습니다. 이렇게 하면

 

그 순간부터 변수가 비공개(캡슐화)되어 클래스 외부에서는 데이터에 접근할 수 없고 runner클래스에서 speed변수에 접근할 수 없게 됩니다!

 

 

그렇다면 어떻게 캡슐화된 데이터를 사용(인스턴스)해줄 수 있을까요?

오류를 수정하려면 데이터를 밖에 노출시키는 메소드를 추가하면 됩니다.

 

SET 메소드 사용해보기

 

캡슐화를 하면은 한 객체를 다른 객체로부터 “보호”하는 것 외부 객체가 직접 객체 내의 데이터를 제어하지 못하도록

[setSetter] 메소드를 생성해서 이 메소드를 거쳐서 다른 객체와 클래스가 값을 바꿔줄 수 있게 합니다.

 

이것이 데이터를 클래스 안에 안전하게 가두는 방법입니다.

 

 

메소드 Set과 식별자 this

 

setSpeed 메소드

setSpeed 메소드를 만들었어요. 여기서 speed변수를 사용하고 싶다면

 

이 동작에서 this생성자를 사용해보세요!

this.speed(멤버변수)와 speed(로컬변수)

 

this.speed는 멤버 변수를 가리키게 되고 speed 변수는 지역변수를 가리킵니다.

(this.speed와 speed는 다른 변수입니다!)

 

motorBikeRunner 클래스에서 Ducati객체의 .setSpeed 메소드에서

이 메소드안에 인자를 넣어줌으로 캡슐화 시킬 수 있습니다.

 

setSpeed 메소드 사용해보기

 

Getter를 활용한 Getter와 Setter 생성

 

메소드 Get

 

 

MotorBikeRunner의 ducati 인스턴스 클래스의 속도를 40으로 설정했는데 이후의 ducati의 속도가 궁금하다면

getter메소드를 써야 합니다.

 

입력값은 필요 없어요, 왜냐고요? 출력이 목적이거든요.

Int getSpeed(){

Return this.speed;

}

 

이렇게 motorBike 클래스에서 코딩하고 Runner클래스에서 honda객체의 getSpeed메소드를 쓰면 어떻게 될까요?

 

get메소드 사용해보기

 

이제 private 된 데이터도 출력이 되네요!

 

 

더 재밌는 것은 이클립스 프로그램이 자동으로 만들게 할 수 있다는 것입니다.

 

원본 클래스에서  오른쪽 마우스를 클릭 - [Source] - [Generate Getters and Setters]를 누르면

자동으로 getter와 setter가 만들어집니다!

 

sette,getter자동완성하는 방법
Generate Getter and Setter

 

이제 get,set 메소드는 이 방법으로 쉽게 만들 수 있습니다.

728x90