본문 바로가기
cs공부/총 정리

OOP 관련 총 정리(특징, SOLID)

by 코딩하는 돼징 2024. 5. 17.
반응형

OOP(Object Oriented Programming)란?

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고 그 객체간의 상호 작용을 통해 로직을 구성하는 방법을 의미한다.

장점 : 코드의 재사용이 용이하므로 유지보수가 쉽다.

단점 : 설계시 많은 시간과 노력이 필요하다.


01 캡슐화

객체의 데이터와 메서드를 하나의 단위로 묶고외부로부터 데이터의 직접 접근을 제한하는 원칙이다. 이를 통해 데이터의 무결성과 객체의 내부 상태를 보호한다. 정보 은닉 기법 중 하나가 캡슐화이다. 추상화도 구현 은닉, 객체의 구체적인 타입 은닉도 업캐스팅이다.

ex) protected, private, public

02 상속

하나의 클래스가 다른 클래스의 특성과 메서드를 물려 받는 기능이다. 이를 통해 재사용성을 높이고 클래스를 계층구조로 형성할 수 있다.

03 추상화

클래스들의 중요하고 공통된 성징들을  추출하여 부모 클래스를 선정하는 것과 이벤트 발생의 정확한 절차나 방법을 정의하지않고 대표적으로 표현할 수 있는 표현을 대체하는 것을 말한다. 

ex) abstract, interface, virtual

04 다형성

동일한 인터페이스나 상위클래스의 메서드를 여러 다른 방식으로 구현하여 사용할 수 있게하는 기능이다. 이를 통해 코드의 유연성과 확장성을 높일 수 있다.

ex) 오버라이딩, 오버로딩, 업캐스팅, 다운캐스팅


SOLID 법칙

객체 지향적인 방법으로 코드의 유지 보수성을 높이기위해 사용되는 법칙이다. 여러 디자인 패턴들이 SOLID설계 원칙에 입각해서 만들어졌다.

 

01 단일 책임 원칙(Single Response Principle, SRP)

클래스는 단 하나의 책임만 가진다.

예시) 플레이어와 관련되어 이동, 입력,사운드 기능들이 있을때 이를 별도의 클래스들로 나누는 것이다.

02 개방폐쇄 원칙(Open-Closed Principle, OCP)

확장성에는 개방하고 수정에는 닫혀있어야 한다. 

예시) Enemy 클래스가 있고, 이를 상속받은 Goblin과 Dragon 클래스를 추가한다 가정해보자, 새로운 적 유형을 추가하려면 Enemy 클래스를 수정하지 않고 Orc와 같은 새로운 서브클래스를 만들면 된다.

03 리스코프 치환 원칙(Liskov Substutution Priciple, LSP)

파생클래스가 부모클래스를 대체할 수 있어야 한다는 원칙이다. 그러므로 상속을 바로 사용하는 것보다 인터페이스를 상속해서 여러 인터페이스를 조합하여 사용하는 것이 좋다는 뜻이다.

예시) 두손무기클래스가 장비 클래스를 상속받았다면 두손무기객체는 장비 객체처럼 사용될 수 있어야 한다.

04 인터페이스 분리 원칙(Interface Segregation Principle, ISP)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.

예시) IPlayerAction 인터페이스에 이동,공격,점프가 포함되어있었다고 가정해보자, 이를 IMovable, IAttracker, IJumper등 세분화된 인터페이스로 분리하는 것이 인터페이스 분리 원칙에 해당된다.

05 의존석 역전 원칙(Dependencty Inversion Principle, DIP)

고수준 묘듈은은 저수준 모듈에 의해 의존해서는 안된다. 특정 클래스에 직접적으로 의존하는 것이 아니라 인터페이스를 거쳐 사용하기 때문에 느슨한 결합이 이뤄지게 해야한다.

예시) Game클래스가  IInputHandler인터페이스에 의존하고, 구체적인 입력 방식 키보드와 마우스는 KeyboardInputHandler와 MouseInputHandler와 같은 클래스로 구현된다고 가정해보자 그러면 입력방식이 변경되어도 Game클래스는 수정할 필요가 없다.

 

모듈화란?

큰 문제를 작은문제로 나눌때 이렇게 문제를 작은 부분으로 나누어 나가는 것을 모화라고 한다. 좋은 소프트웨어 일수록 모듈의 독립성이 높다고 한다. 

반응형

댓글