포도가게의 개발일지
OOP(객체지향프로그래밍)? 본문
반응형
객체지향프로그래밍이란?
- OOP (Object-Oriented Programming)이란 객체 지향적인 프로그래밍. 즉, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것이다.
- 객체의 관점이 뭘까? 그 객체가 특정한 목적을 위해 필요한 데이터(필드)나 기능(메소드)를 하나로 묶는 것을 의미한다.
객체가 뭘까?
- 객체는 컴퓨터 자원인 데이터(필드)와 기능(메서드)를 class로 캡슐화(묶어)한것
why? 개발자가 방대해진 코드를 좀 더 간편하게 유지보수하기 위해
캡슐화
- 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미한다.
- 따라서 클래스를 우리가 만들 떄 훗날 이 클래스에서 만들어진 객체가 특정한 목적을 잘 수행할 수 있도록 사용해야할 변수와 그 변수를 가지고 특정한 액션 즉 메서드를 관련성 있게 클래스에 구성해야한다.
* 캡슐화와 정보은닉은 동일한 개념이 아니다. 캡슐화를 하면 불필요한 정보를 감출 수 있기 때문에, 정보은닉을 할 수 있다는 특징이 있다는 것이다.
추상화
- 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법
- 추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다.
- 공통분모를 찾아내어 객체화 시킴
- 과학실청소, 음악실청소 도 전부 교실청소처럼 바닥쓸기, 창문닦기, 칠판닦기를 해야한다.( 벤츠,아우디,Bmw의 바퀴, 핸들, 전진, 후진과 같다)
상속성, 재사용
- 상속이란 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
- 기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.
다형성
- 다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. 즉, 다형성은 형태가 같은데 다른 기능을 하는 것을 의미한다.
이를 통해 코드의 재사용, 코드 길이 감소가 되어 유지보수가 용이하도록 도와준다. - 오버라이딩(메서드 재정의), 오버로딩(매개변수에 따른 같은이름의 다른 기능 메서드)
how?
예를들어
## 아래와 같은 코드에서는 동일한 데이터와 기능이 반복되며 코드의 유지보수를 위해서는 다 바꿔줘야됨 ##
철수_쓰레받기 = 0;
철수_교실 = 101호;
영수_쓰레받기 = 0;
영수_교실 = 102호;
희수_쓰레받기 = 0;
희수_교실 = 103호;
while(철수청소){ code }
while(영수청소){ code }
while(희수청소){ code }
## 하지만 중복되는 데이터(필드) 및 기능(메서드)를 캡슐화함으로써 코드의 유지보수와 재활용이 쉬워진다 ##
class 바닥청소{
private Room 교실;
private int 쓰레받기 = 0;
public 바닥청소(Room 교실이름){
교실 = 교실이름;
}
public void 바닥쓸기(){
while(){
code
}
}
}
바닥청소 철수 = new 바닥청소(101호);
바닥청소 영수 = new 바닥청소(102호);
바닥청소 희수 = new 바닥청소(103호);
철수.바닥쓸기(); 영수.바닥쓸기(); 희수.바닥쓸기();
바닥청소 목적만 아니라, 칠판청소, 창문청소를 더 간편하게 쓸 수 없을까?
## interface나 abstract class를 이용하여 청소라는 기능을 오버라이드하여 묶어 줄 수 있다 ##
Public interface 청소구역(){
public void 청소();
}
class 칠판청소 implements 청소구역{
private Room 교실;
private int 지우개 = 10;
public 칠판청소(Room 교실이름){
교실 = 교실이름;
}
public void 칠판닦기(){
while(){
code
}
}
@Override()
puliic void 청소(){
칠판닦기();
}
}
class 창문청소 implements 청소구역{
private Room 교실;
private int 윈덱스 = 10;
public 창문청소(Room 교실이름){
교실 = 교실이름;
}
public void 창문닦기(){
while(){
code
}
}
@Override()
puliic void 청소(){
창문닦기();
}
}
## 청소 기능(메서드)로 묶어줌으로써 좀 더 간편하게 코드를 유지보수할수 있다 ##
## 바닥청소의 쓰는순서를 바꾸고싶으면 바닥청소 객체에서 바닥쓸기 메서드만 수정하면 되게 된다 ##
바닥청소 철수 = new 바닥청소(101호);
바닥청소 영수 = new 칠판청소(102호);
바닥청소 희수 = new 창문청소(103호);
list = [철수, 영수, 희수]
for x in list:
x.청소();
'CS' 카테고리의 다른 글
정규 표현식 (0) | 2022.03.26 |
---|---|
Solid 원칙 (0) | 2022.01.31 |
Mutex vs Semaphore vs Monitor (0) | 2021.12.27 |
Web Server (0) | 2021.12.25 |
동적 메모리 할당 분리가용 리스트 (0) | 2021.12.23 |
Comments