개념
객체지향, object-oriented programming(OOP)란 무엇인가?
프로그램의 설계방법론이고 개념이다.
오브젝트를 기본 단위로 나누고, 오브젝트와 오브젝트가 상호작용하게 만들어 각자의 역할을 수행하게 한다.
Java의 경우 class를 정의하여 객체(오브젝트)를 생성하고 관리한다. 주의해야 할 것은 객체지향은 설계방법론이고 개념이므로, 어떤 언어 자체를 객체지향이라고 정의할 수 없다.
현재 웹 개발 언어로 사용되는 많은 언어들은 객체지향적인 개념으로 설계되었거나, 지원을 하고 있는 것이므로 개념
의 영역으로 생각해야 한다.
특징
객체지향은 다른 특징들도 있지만 대표적으로 캡슐화, 상속, 다형성의 특징을 갖는다.
캡슐화
캡슐화란 클래스 안에 변수와 함수를 작성하여 하나의 단위로 정의하는 것이다. 클래스를 통해 인스턴스화된 인스턴스 안에 있는 변수, 메서드에 쉽게 접근이 가능하다.
그리고 캡슐화에서 관련있는 특징 중 정보은닉
이라는 개념이 있는데 말 그대로 외부로부터 정보를 은닉하는 것을 뜻한다. 외부로부터 정보를 은닉한다는 것은 결합도를 떨어뜨린다는 뜻이 되는데, 응집도를 높히고 결합도를 낮추어 프로그램의 유지보수성을 높히는 개념은 현대의 프로그래밍 방식에 필수적인 개념이기도 하다.
내부의 정보를 외부에서 마음대로 수정할 수 없게 하고, 내부 로직을 노출하지 않고 기능에 집중하도록 설계한다.
이런 외부에서 정보의 접근을 제어하는 접근제어자 기능 중 객체지향 프로그램에서 일반적으로 지원하는 기능은 다음과 같다.public
: 외부에서 접근이 가능protected
: 상속 관계에서 접근이 가능private
: 클래스 내부에서만 접근이 가능
상속
상속
의 개념은 어떤 클래스를 물려받는 것, 또는 계승하는 것이다. 그래서 흔히 부모와 자식 관계를 대입하여 부른다.재정의(오버라이딩)
하여 부모클래스의 메서드를 자식클래스의 메서드에서 사용하는 것이 가능하며 객체지향에 없어서는 안될 기능이다.
하지만 상속의 단점 또한 존재하는데, public의 사용을 남발한다면 캡슐화의 정보은닉에 관한 특징이 깨져 클래스의 정보가 노출될 수 있다.
그리고 상속을 하고 있다는 것은 바꿔 말하면 그 클래스를 `의존` 하고 있는 것과 같다. 이것은 결합도가 필연적으로 높아진다는 말인데, 현대 프로그래밍이 지향하는 응집도를 높히고 결합도를 낮추는 방식과는 정 반대의 상황이 될 수 있다.
다형성
하나의 변수, 메서드가 상황에 따라 달라질 수 있다.
개인적으로 객체지향의 핵심 중의 핵심적인 기능이라고 생각한다.
인터페이스를 구현한 클래스를 정의하고, 해당 클래스를 상속한 클래스에서 메서드를 오버라이딩한다면 어떤 클래스를 참조하는지에 따라 기능이 다르게 동작한다.
이게 무슨 말인지 설명하자면, 인터페이스를 변수 타입으로 사용하고 해당 인터페이스를 구현한 클래스를 선언한다면 오버라이딩한 메서드가 실행된다.
이런 특징은 인터페이스를 구현한 객체라면 다른 기능을 가지더라도, 변수 자체를 새로 선언해 수정할 필요없이 인터페이스에 갈아 끼워주기만 하면 되기 때문에 다형성이 보장된다.
Reference
'CS' 카테고리의 다른 글
Parsing이란? (0) | 2022.03.18 |
---|