티스토리 뷰
Goal
- 객체지향 프로그래밍에 대해 알아본다
- 캡슐화에 대해 알아본다
1. 객체지향 프로그래밍 (Object Oriented Programming)
- 실 세계의 일들을 객체를 사용하여 모델링한 프로그래밍.
객체지향 프로그래밍을 알아보기 위해 먼저 그 이전의 프로그래밍 패러다임에 대해 알아보자.
1) 절차적인 프로그래밍 : 절차(순서)에 따라 프로그래밍을 제작. 절차가 길어지면 프로그램의 볼륨이 커지고
코드를 관리하기 어려워 진다.
2) 구조적인 프로그래밍 : 절차를 함수 단위로 잘라서 프로그래밍을 제작. 함수 단위로 분류하기 때문에 절차지향 보다는 볼륨감이 줄어들지만 여전히 프로그램이 복잡함.
3) 객체지향 프로그래밍 (OOP) : 절차, 구조적 프로그래밍의 단점을 보완하기 위해 객체를 사용하여 모델링하는 프로그래밍. ex) 클라스 파일을 수납공간으로 다양한 종류 별로(데이터별, 기능별) 분류하는 프로그래밍.
2. 캡슐화
- 객체지향의 초석
- 데이터들(변수)과 그 데이터를 처리하는 코드(메서드)를 하나의 단위로 묶는 메커니즘
- 캡슐화된 클래스의 변수들은 접근제어자를 통해 클래스 외부에서는 접근할 수 없음 (public, private)
- 해당 클래스의 내부의 메서드를 통해 변수를 조작할 수 있음 (getter, setter)
*내부의 메서드인 getter, setter를 통해 외부에서 변수를 조작하는 이유는 외부에서 바로 변수에 접근할 경우
생각하지 않은 오류가 발생할 수 있기 때문에 캡슐화가 깨져버린다. 따라서 getter와 setter로 변수를 접근하고 getter, setter의 변경에 따른 오류는 하나의 데이터 파일에서 바로 파악할 수 있도록 하여 캡슐화가 깨지는 것을 방지한다.
- 데이터 구조에 따른 코드의 수정범위를 캠슐 범위로 한정할 수 있음.
2-1 캡슐화를 하는 이유|
함수는 외부의 수정에 절대 영향을 받아서는 안된다. (함수 모듈의 독립성)
하지만 구조화된 데이터를 함수가 사용하게 되면 외부의 영향에 따라 오류가 발생할 수 있다
class Ellipse { // 구조화된 데이터 Elipse
int x, y, w, h;
int color;
}
void draw(Ellipse ellipse) { // 함수가 구조화된 데이터 elipse를 사용함.
printf("....", ellipse.x);
ellipse.x + ellipse.y ....
}
// 함수 draw는 구조화된 데이터인 Ellipse의 변수가 변경되면 오류가 발생할 수 있음.
해결방법
1. 절대 변수를 바꾸지 않는다 (하지만 바꿀 수 없는 상황은 거의 없다..)
2. 바꾼 후 변수를 수정한다 (바꿔도 어디를 바꿔야 하는지 모르기 때문에 또다른 문제가 발생한다)
둘 다 좋지 않다.
따라서 고쳤을 때 오류가 나는 함수들을 한곳에 모으고 수정이 필요할 때 바로 오류가 나는 부분을 알 수 있도록 하는게 최선이다.
즉, 객체지향 프로그래밍에서는 클래스를 분류할 때 데이터를 기준으로 분류하는게 좋다.
이것을 캡슐화라고 한다.
class Ellipse { // 구조화된 데이터 Elipse
int x, y, w, h;
int color;
void draw(Ellipse ellipse) { // 함수가 구조화된 데이터 elipse를 사용함.
printf("....", ellipse.x);
ellipse.x + ellipse.y ....
}
}
// draw함수를 구조화된 데이터 안에 담는다.
- 20200424
- 20200417
- 20200420
- 20200319
- 20200503
- 20200403
- chapter8
- 20201204
- 20200624
- 20200512
- 20200415
- 20200413
- chapter7
- 생활코딩리눅스
- 20200421
- 백준
- 20200622
- 20200317
- 20200330
- 20200502
- likelion
- 20200406
- 20200504
- 20200425
- 20200429
- 20200428
- 20200427
- 20200804
- 20200423
- 20200510
- Total
- Today
- Yesterday