OOP 란?

단 몇 줄로 정리할 수 있는 개념은 아닌 것 같지만, 항상 정의내리기 어려워서 간단하게나마 정리해둠. OOP란 Object-Oriented-Programming의 약어로써, 객체지향 프로그래밍을 의미. 
 유형 또는 무형의 사물(데이터)를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.
 

OOP의 특징

코드의 재사용성이 높음.
코드의 변경이 용이
직관적인 코드 분석
추상화, 캡슐화, 상속, 다형성


캡슐화

캡슐화는 클래스 내부에 여러 속성과 기능을 함께 묶는 것을 의미하기도 하며, 클래스 내부의 속성이나 기능을 외부에 노출하지 않고 보호하는 것을 의미한다. 즉 여러 속성과 기능을 함께 묶어 클래스로 취급하며, 이러한 클래스 내부를 외부에서 접근하지 못하도록 보호하는 것이다.

why ?

1.클래스 단위로 묶음으로써 프로그램을 바라보는 단위가 커진다. 절차지향언어처럼 함수단위로 구조화하는 것이 아니라, 프로그램 전체를 클래스 단위로 바라볼 수 있게 해준다. 

2.내부의 데이터나 함수를 외부에서 참조하지 못하도록 함으로써 내부의 변경이 자유로워 진다. 외부에 노출되어 많은곳에서 사용 또는 변경된다면 , 클래스 내부의 변경으로 인해 영향가는 곳이 많기 때문이다. 따라서 객체 지향에서는 클래스 내부의 데이터를 외부에서 참조하지 못하도록 차단한다. 내부의 데이터나 함수를 외부에서 참조하지 못하도록 차단하는 개념을 정보은닉이라고 한다. 


추상화

추상화는 객체에서 공통된 속성과 행위를 추출하는 것을 의미한다. 예를 들어, A대학 교수  , B대학 교수 , C대학 교수가 있는데 이들의 공통된 속성과 행위를 교수라는 클래스로 추상화할 수 있다. 

why?

필자의 생각으로는 확장성 때문인 것 같다. 보통 클래스는 설계도라고 비유하고  , 추상클래스는 미완성 설계도라고 비유한다. 미완성 설계도로 제작(객체생성)을 할 수 없지만 공통이 되는 설계도를 가지고 있는 것과 아무것도 없는 상태에서 완성 설계도를 만드는 것은 확연한 차이가 있을 것이다.


상속

클래스의 속성과 오퍼레이션을 하위 클래스에 물려주거나, 상위클래스에서 물려받는 것을 말한다. 

why?

재사용으로 인해 코드가 줄어든다. 상위클래스에 정의되어있는 멤버변수나 메소드를 다시 정의하지 않고 재사용할 수 있으므로, 코드가 줄어든다.

다형성

흔히들 알고있는 부모자료형에 자식자료형을 담는 것이라고 알고있었지만,객체지향에서의 다형성은 '여러 클래스들이 동일한 이름의 오퍼레이션을 서비스하도록 하는 것' 이라고 한다. 후자의 개념에 전자가 포함되는 것 같다. 후자에 의하면 메소드 오버라이딩도 , 메소드 오러로딩도 다형성이다. 

why?

여러타입의 클래스를 하나의 타입으로 관리하니 유지보수가 좋음. 확장성이 좋고, 결합도가 강하지 않은 프로그래밍이 가능하다.

확장성이 좋은이유? 새로운 타입의 클래스를 정의하여도 부모클래스를 상속받거나 or 인터페이스를 구현하여 기능만 추가하면 코드가 변하지 않음.


'CS > 개발지식' 카테고리의 다른 글

문자 표현 방식  (0) 2019.02.16
base64 인코딩/디코딩 원리  (0) 2017.04.04
프로세스와 쓰레드의 차이점  (0) 2017.03.20
Runnable 과Thread의 차이  (0) 2017.03.19

+ Recent posts