오늘은 새로운 팀원들과 인사 한 후 새로운 강의를 지급받아 다음주 월요일까지 완강 후, 팀별 SA작성까지 완성하기로 계획하였다.
객체 지향 (Object-Oriented)
좋은 설계란?
요구 기능을 정확히 수행하고, 변경을 쉽게 수용할 수 있는 설계. 이해하기 쉬운 코드가 변경하기 쉬운 코드로 이어짐.
객체 지향 (Object-Oriented): 소프트웨어 개발에서 기능이 아닌 객체에 초점을 맞추고, 객체의 역할을 명확히 정의하는 방법론. 책임과 권한을 가진 객체들이 협력하여 기능을 수행.
객체 지향 프로그래밍 (OOP): 상태(데이터)와 프로세스(메서드)가 같은 모듈 내에 배치되는 방식. 현실 세계의 객체를 유연하게 표현하며, 코드의 추상화를 통해 직관적인 사고를 가능하게 함.
가독성이 좋고, 재사용성이 높으며, 유지보수가 쉬운 코드를 작성해야 함. 코드 변경 시 최소한의 수정으로 효율적인 시간 관리를 목표로 함.
장점: 데이터와 기능이 밀접하게 연결되어 코드 구조와 동작을 직관적으로 이해할 수 있음. 객체의 기능과 데이터는 재사용 가능하여 코드의 재사용성과 확장성이 향상됨.
객체 지향 설계 5원칙(SOLID 원칙): 소프트웨어 설계의 품질을 높이기 위한 가이드라인
1. 단일 책임 원칙 (Single Responsibility Principle, SRP): 클래스는 하나의 책임만 가져야 하며, 그 책임을 완수하는 데 필요한 모든 기능을 포함해야한다. 즉, 클래스는 변경 이유가 하나만 있어야 함.
2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP): 소프트웨어 엔티티(클래스, 모듈 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다. 즉, 기존 코드를 변경하지 않고도 기능을 추가할 수 있어야 함.
3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP): 자식 클래스는 부모 클래스의 대체로 사용될 수 있어야 하며, 부모 클래스의 기능을 변경하지 않고도 자식 클래스를 사용할 수 있어야 한다.
4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP): 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다. 즉, 여러 개의 구체적인 인터페이스로 분리하여 클라이언트가 필요한 인터페이스만 사용할 수 있도록 야한다.
5. 의존성 역전 원칙 (Dependency Inversion Principle, DIP): 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다. 즉, 구체적인 것에 의존하기보다는 추상적인 것에 의존해야 함.