[OOP] 객체 지향 프로그래밍

객체 지향 프로그래밍에 대해서 간단하지만 확실히 알아보자.

OOP (Object Oriented Programming)

실세계를 직관적으로 모델링하는 패러다임이며, 그 패러다임의 중심에는 객체가 있다.

기존 방식은 데이터와 프로세스를 엄격히 구분했다면, 객체 지향은 데이터와 프로세스를 하나로 묶음으로서 자율성을 보장한다. 객체에게 역할책임을 주고 스스로 판단하여 수행하도록 하고, 이러한 객체들이 협력하며 시스템을 구축한다.

카페의 바리스타를 예시로 들어보자. 바리스타는 커피를 만드는 “역할”이 있으며, 주문받은 커피를 만들어야하는 “책임”이 있다. 커피를 만드는 과정에서, 바리스타 스스로 판단하며 책임을 완수한다.

만약 카페에 손님, 캐시어, 바리스타가 있다면, 사람마다 역할과 책임이 있고 이들이 “협력”하며 카페가 운영된다.

이 예시에서 객체지향은 사람을 중심으로 생각하며, 사람은 객체를 의미한다.

Pros and Cons

장점은 코드 재사용성이 높고, 유지보수가 쉽다. 대규모 시스템에 적합하다.

단점은 설계가 어렵고, 느리다.

왜 느릴까?

클래스에 있는 메소드를 사용하기 위해서 인스턴스로 만들어 메모리에 저장해야 한다. 전역(static)으로 선언해서 메소드를 호출할 수 있지만 이는 OOP에 반하는 방식이기에 좋지 않다. 인스턴스를 생성한 후에 메소드를 호출하게 되는데, 인스턴스를 생성한 만큼 메모리를 많이 사용하게 되고, 차지하는 메모리가 많은 만큼 로드하는 시간이 길어지기 때문에 느리다.

OOP의 특징

OOP의 두드러지는 특징으로 추상화, 캡슐화, 상속, 다형성이 있다.

추상화 (Abstraction)

추상화는 공통 속성을 묶어서 표현하는 것이다. Java에서 어떤 객체를 표현하기 위해 class를 정의하는 것도 추상화이다.

캡슐화 (Encapsulation)

캡슐화는 객체를 캡슐로 싸서 그 내부를 보호하고 볼 수 없게 하는 것이다. 객체 외부와의 접근을 위해 일부를 노출한다. 외부에서 클래스 내부의 데이터 접근을 금지하는 것을 정보 은닉화(Information Hiding)라고 한다.

상속 (Inheritance)

상속은 상위 개체가 하위 개체에게 물려주는 것으로, 하위 개체는 상위 개체의 속성을 모두 가지고 있음을 의미한다. Java에서 이미 만들어진 클래스의 필드나 메소드를 물려받게 하여 코드의 중복 작성을 방지한다.

다형성 (Polymorphism)

다형성은 같은 이름의 메소드 호출에 대해 객체에 따라 다른 동작을 할 수 있도록 구현되는 것이다.

오버라이딩(Overriding): 오버라이딩은 부모 클래스의 메소드를 재정의 하는 것이다.

오버로딩(Overloading): 오버로딩은 이름이 같은 여러 개의 메소드를 중복 정의하는 것이다. 매개 변수의 개수 또는 타입이 달라야 하고, 리턴 타입은 상관없다.

참조

태그:

카테고리:

수정일자:

생성일자:

댓글 남기기