본문 바로가기
프로그래밍 패러다임/객체 지향 프로그래밍

OOP.2.추상화와 캡슐화 - 1

by 시니성 2023. 7. 5.

이번 글에서는 객체지향의 4가지 특징중 두개인 추상화와 캡슐화에 대해서 다루어 보겠습니다.

객체, 클래스, 인스턴스는 엄밀하게 서로 미묘한 차이를 가지지만, 일반적으로 대화하거나 소통시에는 비슷한 의미로 많이 통용되는 경우가 많습니다.

하지만 본 글에서는 추상화의 원활한 설명을 위해서 차근차근 용어부터 정리하면서 시작하도록 하겠습니다.

 

1) Object 객체

드디어 객체 지향 프로그래밍 이라는 큰 제목을 일부 설명할 수 있는 '객체(Object)'에

대한 이야기가 나왔습니다.

객체는 실제 세상에 존재하는 사물이나 개념을 의미해요.

수많은 사물이나 개념들 중 내가 시스템으로 옮길 대상을 의미합니다.

피트니스 짐, 헬스장을 시스템으로 옮긴다고 생각해볼까요?

트레이너도 객체가 될 수 있고, 회원도 객체가 될 수 있습니다. 운동이라는 개념도 객체가 될 수 있구요. 혹은 헬스장 전체가 객체가 될 수도 있습니다.

혹시 객체 지향이라는 낱말의 의미가 혹시 조금씩 와 닿이시나요?

현실세계는 절차지향적으로 움직이지 않습니다. 우리 현실세계도 다양한 객체들간의 상호작용으로 움직이고 있죠.

즉, 객체지향이란 현실세계의 무언가를 좀 더 수월하게 시스템으로 옮기기 위한 방법론 이라고도 볼 수 있는거죠.

 

2) Abstraction 추상화

추상화라는 한자어가 굉장히 낯설고 어렵게 다가오지만, 현실세계의 객체(Object)를 시스템으로 옮길때 필요한 객체의 정적인 특성과 동적인 특성들을 추출해내는 과정입니다.

 

- 정적인 특성은 쉽게 말해 명사(Noun)으로 표현될 수 있는 특징들이고 Java라는 언어에서는 특히 Field라는 표현을 많이 사용합니다. 다른 언어에서는 멤버변수 라고도 불리우는 녀석들입니다.

 

- 동적인 특성들은 동사(Verb)로 표현될 수 있는 특징들 입니다. Method나 Function으로 많이 불리웁니다.

 

아래는 트레이너라는 객체(Object)를  추상화 하는 예시입니다.

[OBJECT] Trainer

Field(=Property, Member variable, 정적인 특성)

a. 이름 b. 직업 c. 키 d. 몸무게 e. 골격근량 f. 지방량 g. 수업경험 h. 수입



Method(=Function, 동적인 특성)

a. 유산소 운동하다 b. 근력운동 한다. c. 수업하다.

3) 캡슐화

앞선 글에서 언급한 절차지향 프로그래밍에서는 데이터에 누구나 접근이 가능하고 변경이 가능했기 때문에, 에러의 원인 추적이나, 디버깅이 어렵다고 설명드렸었습니다.

데이터(=정적인 특성, Field)와 데이터를 변경할 수 있는 행위(=동적인 특성, Method)를 한 데 묶어 캡슐 외부에서는 변경이 불가능 하도록 만드는 것이 캡슐화 입니다.

캡슐화에 대해선 다음 글에서 좀 더 자세히 다루겠습니다.

 

4) Class 클래스

클래스는 객체를 이번 주제인 추상화와 캡슐화의 과정을 거쳐서 시스템상에 옮기기 위해 설계도로 만들어 놓은 것 입니다.

위 추상화 과정을 거친 클래스의 단순한 예시는 아래와 같습니다.

pubilc class Trainer {

  private String name;

  private String job;

  private double height;

  private double weight;

  private double skeletalMuscleMass;

  private double fat;

  private int lectureExp;

  private int income;

  

  public void aerobic() {

    this.fat--;

    this.weight--;

  }



 public void weightTraining() {

  this.skeletalMuscleMass++;

 }



 public void doLecture(){

   lectureExp++;

   income++;

 }

}