본문 바로가기

기술면접/정리하기

객체 지향(OOP)

: 독립적인 각각의 객체로 프로그램이나 시스템을 구성하는 일

 

근래 거의 모든 프로그래밍이 객체지향 개념으로 구현된다. 또한 새롭게 제시되는 방법론들도 모두 객체지향을 기반으로 제시된다.

 

 

1) 추상화 (Abstraction) : 실세계의 사물을 추상화

2) 캡슐화 (Encapsulation)

3) 상속 (Inheritance)

4) 다형성 (Polymorphism)

5) 정보은닉 (Information-Hiding)

위의 요소들로 구현된 객체의 구성으로 프로그램을 만들어 나가는 것 == 객체지향 프로그램

 

객체지향 프로그램

: 캡슐화, 다형성, 상속을 이용하여 코드 재사용을 증가시키고, 유지보수를 감소시크는 장점을 얻기위해 객체들을 연결 시켜 프로그래밍 하는것

 

 

OOP는 실세계 real world를 모델링 하는 것?

OOP가 다른 방법론들보다 실세계 모델링을 더 잘지원한다는 것은 맞는 말이 아니다.

모든 컴퓨터 프로그램은 프로세스를 모델링 하는 방법을 찾는 것이다. 모델이 잘못됬다면 소프트웨어도 잘못된다.

개념적 모델은 실세계의 분석으로 만들어 지는데, 컴퓨터 소프트웨어는 전적으로 개념적 모델에 기반한다.

OOP는 더 잘 모델링하는것을 보장하는 것이 아닌, 그저 모델의 구현방법이 약간 다를 뿐이다.

 

프로그램은 세상을 모델링 하는 것이 아니라 세상의 부분만 모델링 할 수 있다.

 

 

OOP는 코드 재사용을 위한 것?

코드의 재사용은 Non-OOP에서는 불가능하고 OOP에서만 가능하지만, 코드를 재사용 하는것은 코드를 어떻게 작성하느냐에 따른 것이지 OOP가 코드 재사용을 보장하는 것은 아니다.

또한 Non-OOP 언어도 재사용 가능한 라이브러리를 작성하는 것이 가능하며, OOP 코드로 재사용 불가 코드가 만들어진다.

 

 

OOP는 모듈화에 대한 것이다?

모듈화 프로그래밍은 Non-OOP 언어에도 수년동안 존재해왔기에 객체지향이 비객체지향보다 낫다는 설명으로 쓰일 수 없다.

모든 언어는 하나의 어플리케이션 소스코드를 한개의 파일에 집어넣을 수 있고, 여러개의 작은 모듈로 나눠서 모듈별로 파일에 넣고 유지보수하고 컴파일 할 수 있다.

 

게다가 여러개의 클래스로 구성된 어떤 소프트웨어는 자동적으로 모듈화 된다.

중요한 요소는 모듈또는 클래스를 잘 디자인 하는것!

 

 

OPP는 플러그를 가능하게 하는 것이다?

특정 오브젝트가 문제가 있다고 밝혀지면, 어플리케이션에서 그 오브젝트를 간단하게 제거하고 다른 오브젝트를 플러그 하듯이 대체할 수 있다. (ex/ 자동차의 바퀴에 펑크가 나서 바퀴만 교체하는 것)

이것은 다른 모듈을 손 볼 필요없이 개개인의 모듈이 독립적으로 수정되고 컴파일 되고 삽입될 수 있다고 말하는 모듈화의 경우와 같다.