본문으로 바로가기

2021.03.15 - [이론공부/객체지향 프로그래밍] - 객체지향 프로그래밍 공부#1 (OOP를 공부해야하는 이유)

 

객체지향 프로그래밍 공부#1 (OOP를 공부해야하는 이유)

구조화 프로그램 일반적으로 순차, 조건, 반복문에 작성된프로그램, 구조화 프로그램 장점은 실행순서가 항상 위에서 아래로 작동하므로 쉽게 이해할 수 있는 편이다. 대부분의 언어가 이에 속

thesauro.tistory.com

이전 내용을 필수적으로 다시금 읽어보는걸 추천함

추상화란 무엇인가

2021.03.08 - [이론공부/자료구조] - 자료구조 공부#2 (자료형, 추상 자료형)

 

자료구조 공부#2 (자료형, 추상 자료형)

자료형(Data Type) 말 그대로 데이터의 종류(형식)를 말한다. 정수, 실수, 문자열 등이 기초적인 자료형의 예 자료형의 3가지 형태 기초 자료형 파생 자료형 사용자 정의 자료형 char Array(배열) Struct(

thesauro.tistory.com

추상화가 무엇인지 이해하려면 이전 자료구조 공부와 연관이 된 내용이므로 참고하자

데이터 추상화

코드 추상화는 코드를 묶어 함수로 작성하는 것이지만, 데이터 추상화는 코드(함수)뿐만 아니라 관련 변수 까지도 묶는 것을 말한다.

 

#include <stdio.h>

int iX;
int iY;

void Asign(int a, int b){
	iX = a;
    iY = b;
}

int Add(){
	return iX + iY;
}

void main(){
	Asign(2, 3);
    
    int iResult = Add();
    printf("두 값을 더한 결과 : %d", iResult);
}

 

이전에 이어진 함수 추상화의 예시 코드 이다. 코드를 보면 iX, iY 변수와 Add, Asign 함수가 연관이 되어있음을 알 수 있다.

 

위에 코드 추상화를 이용하면 작동은 잘되겠지만, iX, iY의 변수는 어딘가에서 잘못된 접근으로 인해 원하는 결과물이 안나오게 될 수도 있다. ex) 양수 음수를 잘못넣어서 잘못된 결과가 출력 되는 경우

 

데이터 추상화 사용예시

데이터 추상화(추상자료형) IMADT
(
	int iX;
	int iY;

	void Asign(int a, int b){
		iX = a;
	 	iY = b;
	}

	int Add(){
		return iX + iY;
	}
);

위와 같이 추상 데이터 형식의 코드를 작성하면 함수, 변수를 포함하여 하나의 추상 자료형 "IMADT" 를 만든다

이와 같은 형식을 C++ 에선 'Class' 로 표현한다.

 

Class IMADT
(
	int iX;
	int iY;

	void Asign(int a, int b){
		iX = a;
	 	iY = b;
	}

	int Add(){
		return iX + iY;
	}
); // ; 로 문법을 맞추어야 한다

 

이전 내용을 보면 추상 자료형은 표준자료형과 거의 같다고 보면 되므로 이를 사용 할시엔 a 라는 변수를 선언할때,

int a;
IMADT a;

이런 식으로 int 형식의 a를 선언 하는것 처럼 우리가 만든 추상자료형 'IMADT' 형태의 변수 a를 선언 할 수 있다.

 

#include <stdio.h>

// iX, iY 초기화, 덧셈 클래스
Class IMADT
(
	int iX;
	int iY;

	void Asign(int a, int b){
		iX = a;
	 	iY = b;
	}

	int Add(){
		return iX + iY;
	}
); 

// acalc, bcalc, cclac 는 각각 독립된 IMADT 형식의 변수 
IMADT acalc, bcalc, ccalc;

위에 코드를 보면 알 수 있듯이 IMADT 클래스로 acalc, bcalc, ccalc 의 각각의 객체를 만들었으며

이 개체 안에는 각각의 aclac(iX, iY, , Asign(), Add()) 이런식의 멤버 변수, 함수가 들어 있다.

 

void main(){
	
    aclac.Asign(2,3);
    int Result = aclac.Add();
    printf("두 값을 더한 결과 : %d", iResult);
}

위에 클래스로 객체의 형식을 만들고 이제 aclac 이라는 객체를 선언하면 함수 추상화와는 달리 함수를 사용할 때

(객체 - 함수) 이런 식으로 호출을 해야한다.

 

하지만 이런식으로 바로 호출하면 오류가 날 것이다. IMADT 형식 객체 aclac 안에 Asign, Add 함수는 은폐(Private) 상태여서 멤버 내에서는 작동을 하겠지만 그 바깥, 메인함수에서 볼 때에는 은폐 되어 있기 때문이다.

 

맴버 객체에 있는 함수를 호출하려면 클래스 형식에서 외부에서 호출 할 수 있도록 지정해주어야 한다.

비유를 하자면 자판기에 버튼과, 동전 투입구를 만들어 놓는 과정이다.

 

#include <stdio.h>

// iX, iY 초기화, 덧셈 클래스
Class IMADT
(
	int iX;
	int iY;

public:
	void Asign(int a, int b){
		iX = a;
	 	iY = b;
	}

	int Add(){
		return iX + iY;
	}
); 

// acalc, bcalc, cclac 는 각각 독립된 IMADT 형식의 변수 
IMADT acalc, bcalc, ccalc;

void main(){
	
    aclac.Asign(2,3);
    int Result = aclac.Add();
    printf("두 값을 더한 결과 : %d", iResult);
}

위와 같이 " public: " 을 사용 하면 퍼블릭 이후에 선언이되는 객체속 함수, 변수는 외부에서 사용이 가능하다. 


데이터 추상화(변수와 함수를 묶는) 이유

데이터 추상화를 하는 이유를 일상생활에 비유를 하면 자판기가 왜 철판케이스로 되어 있냐는 질문과 비슷하다.

철판 케이스가 있음으로서 안에 있는 내용물(자판기 기계, 돈, 음료)등을 보호할 수 있으면서도 이동이 용이 하다.

이전 내용에 다룬 큰 프로젝트 사용시에 코드 재사용에 용이한것과 같다.

 

Public , 인터페이스, 메세지 전달

추후에 다룬 Class 속, public 은 이 내부 함수중에서 사용자가 사용해도 되는 함수, 변수등을 노출 시키는 비유하면 자판기의 외부 버튼, 인터페이스를 노출하는데 사용이 된다. 이 인터페이스를 통해 객체속 함수, 변수를 호출하는것을 메세지 전달(Message Passing) 이라고 불린다.

 


요약 : Class의 사용법, 사용예시, Public, 인터페이스, 메세지 전달의 개념을 다뤘다.
Class를 통해 객체를 선언하여 기존에 함수를 통한 추상화에선 할 수 없던 변수의 은닉, 은폐가 가능하게 되었으며, 외부에서 객체속 함수를 필요로 할때 필요로 한것만 public 을 통해서 노출 시키는 방법도 배웠다.
느낀점 : Class를 사용하는 방법을 설명해주신것 같다. 클래스속 Public 과, 이전 자료구조때 배웠던 추상화, 인터페이스, 메세지전달 등 개념도 어느정도 이해를 가져야겠다.