-
객체 지향 프로그래밍이란
- **OOP(Object-Oriented Programming)**의 약자
- 프로그래밍에서 필요한 데이터를 추상화하여 상태와 행위를 가진 객체로 만듦
- 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
-
객체란
- 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간
- 값을 저장할 변수와 작업을 수행할 메서드를 서로 연관된 것끼리 묶어서 만듦
- 레고로 비유할 때 객체는 레고 조각이 되며 조각을 조립해서 만드는 방식이 객체 지향 프로그래밍
-
객체 지향 프로그래밍 특징
- 추상화
- 객체에서 공통된 속성과 행위를 추출
- 공통의 속성과 행위를 찾아서 타입을 정의
- 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현하여 프로그래밍을 가단하게 함
- 캡슐화
- 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것 → 변수와 함수를 하나로 묶는 것을 뜻함
- 낮은 결합도를 유지할 수 있도록 설계하는 것
- 속성과 기능을 정의하는 변수와 메서드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점을 가지며 접근제어자를 통해 정보은닉을 활용할 수도 있다
- 상속
- 재사용으로 인한 코드가 줄어듦
- 범용적인 사용 가능
- 자료와 메서드의 자유로운 사용 및 추가가 가능
- 상속이 많아질수록 상위 클래스의 변경이 어려움
- 불필요한 클래스 증가 가능
- 상속이 잘못 사용될 수 있음
- 다형성
- 하나의 변수명, 함수명이 상황에 따라 다르게 해석될 수 있음
- 어떠한 요소에 여러 개념을 넣어 놓는 것
- 오버라이딩 → 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용
- 오버로딩 → 같은 이름의 메서드가 인자의 개수, 자료형에 따라 다른 기능을 하는 것
-
객체 지향 프로그래밍 장단점
- 클래스 단위로 모듈화시켜서 개발하기 때문에 업무 분담이 편리하고 개발에 적합
- 클래스 단위로 수정이 가능하기 때문에 유지 보수가 편리
- 클래스를 재사용하거나 상속을 통해 재사용 가능
- 처리속도가 상대적으로 느림
- 객체의 수가 많아짐에 따라 용량이 커짐
- 설계시 많은 시간, 노력을 필요로 함
-
객체 지향 설계 원칙
- 단일 책임 원칙(SRP - Single Responsibility Principal)
- 하나의 클래스는 단 하나의 책임만 가짐
- 원칙이 지켜지지 않을 경우 책임의 변경에 따라 관련된 코드에 영향갈 수 있음
- 개방 폐쇠 원칙(OCP - Open Closed Principal)
- 확장에는 열려 있으나 변경에는 닫혀 있어야 한다
- 기능을 변경하거나 확장이 가능하나 기능을 사용하는 코드는 수정하지 않음
- 리스코프 치환 원칙(LSP Liskov Subsitution Principal)
- 상위 타입 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 작동해야함
- 인터페이스 분리 원칙(ISP Interface Segregation Principal)
- 범용 인터페이스 하나보다 클라이언트를 위한 여러 개의 인터페이스로 구성하는 것이 좋음
- 클라이언트가 필요로 하는 인터페이스로 분리함으로써 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야함
- 의존관계 역전 원칙(DIP - Dependency Inversion Principal)
- 추상화에 의존해야지 구체화에 의존하면 안됨
- 즉 인터페이스 타입에 의존해야 하며 인터페이스 구현체에 의존하지 않음