#oop

What is the object oriented programming

객체지향 프로그래밍 이란 그 이전의 프로그래밍이 컴퓨터가 하는 동작 즉, 명령 단위의 프로그래밍을 벗어나 인간이 사고하는 방식 그대로를 표현할 수 있는 방식으로 프로그래밍을 하는 프로그래밍 패러다임을 의미한다.

객체지향 프로그래밍 에서는 실제 생활의 행동과 사물 그대로를 프로그램 상에서 표현하며 모든 프로그래밍은 이러한 ‘객체’ 를 기반으로 움직이게 된다. 여기서 객체라 하면 속성(attributes) 과 행위(method)를 가지는 일종의 데이터이다.

이러한 객체지향 프로그래밍에서는 코드 재사용성과 확장성을 위해 상속(inheritance) 이라는 개념이 존재하는데, 이는 class 와 prototype 의 형태로 나타난다.

먼저 class based language 에서는 object 보다 항상 class 가 먼저 정의되어야 하며, object 는 이러한 class 를 통해 생성된다. Class 를 통해 instantiate 된 객체를 instance 라고 하며, 이렇게 생성된 instance 는 class 의 속성에 따라 일관된 방식으로 통제될 수 있다. 이러한 class based language 에서는 특정 class 를 inherit 하여 코드 재사용성과 확장성을 늘릴 수 있는데, 이렇게 상위 class 를 inherit 받아 새로운 class 가 생성되면, 상위 class 를 super class 상속받은 클래스를 subclass 라고 부른다.

prototype-based language 에서는 class 라는 개념이 없으며, prototype 이라는 개념을 통해 object 자체를 복사하고 확장한다. 가령 javascript 와 같은 언어들이 이러한 갈래에 속하지만 시간이 지남에 따라 javascript 에서도 class 를 지원하면서 그 성격이 변화하고 있다.

이러한 객체지향 프로그래밍의 장점은 재사용성이 매우 높다는 것이다, 특정 객체가 수행하는 역할과 특성을 명확하게 규정해 놓으면 다른 개발자들은 해당 객체를 간편하게 가져다 쓸 수 있다. 이는 프로그램의 기능인 도메인 단위로 객체들이 잘 나뉘어 있기 때문이며, 가령 함수의 이름이나 클래스의 이름만으로도 해당 객체의 특성을 손쉽게 유추하고 사용할 수 있는 특성이 있다.

하지만, 이러한 OOP 에도 단점이 존재하는데, 아는 procedural program 에 비해 코드라인이 길고 특정 기능을 수행하기 위해 많은 명령어가 수행되기 때문에 상대적으로 성능이 좋지 않은 부분이 있다.

또한, 각 개체가 저마다의 상태를 가지기 때문에, 예상치 못한 상태의 불일치로 예측할 수 없는 상태를 가지게 되는 경우가 있어 어플리케이션 내부에서 버그를 가지는 경우가 있다. 이를 해결하기 위한 방안으로 functional programming 이 대두되고 있는데, 그 핵심은 바로 모든 기능을 수학적 함수로 계산하는 것으로 취급하여 최대한 상태변화 혹은 mutable data 를 변경하지 않는 것을 원칙으로 한다. 가령, 함수형 프로그래밍 에서는 pure function 이란 개념을 매우 중요하게 여기는 데 이는 같은 입력값을 주면 항상 같은 결과가 나오는 함수로 전역 변수나 혹은 특정 시스템의 상태에 좌우되지 않는 pure 한 함수를 의미하고 이러한 pure function 은 시스템의 안정성을 높여주는 핵심적인 역할을 한다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×