기초 개발상식 및 개념들 - 1
1. OOP (객체지향프로그래밍)
OOP
란 인간중심적 프로그래밍 패러다임이라고 할 수 있다.OOP
로 작성한 코드는 재사용성이 높다.- 소프트웨어의 가치는 변화이다.
- 이전처럼 잘동작하게 하는 것이 유지보수가 아니다. 변화를 주어서 계속 유용하게 하는 작업이 유지보수이다. Jessica Kerr
1_1 객체지향과 절차지향 프로그래밍 비교
절차지향
- 일단 쉽다. 하지만 시간이 갈수록 이런 데이터를 공유하는 방식은 변화가 필요할 때 수정을 복잡하게 만든다
- 요구사항이 늘어갈수록 소스의 복잡도는 올라가고, 수정해야할 코드는 늘어간다.
객체지향
- 객체는 데이터와 프로시저로 구성된다.
- 절차지향에 비해서 처음 프로젝트를 시작할 때 어려울 수 있다.
- 데이터와 프로시저를 알맞게 작성하고, 나누어야하는 부분에서 어려울 수 있다.
- 객체의 핵심 == 기능 제공
2. 캡슐화
- 데이터 + 관련 기능 묶기
- 캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고 내부구현을 변경할 수 있는 유연함.
- 정보은닉 의미를 포함한다.
- 객체가 기능을 어떻게 구현했는지 외부에 감추는 것
- 외부에 영향없이 객체 내부 구현 변경가능
- 기능에 대한 이해를 높인다.(의도를 파악하는데 도움을 준다.)
2_1 캡슐화를 위한 규칙
- 1. Tell, Don’t Ask =>
데이터
를 달라 하지말고 처리해서 결과만 줘!
- 2. Demeter’s Law =>
- Method에서 생성한 객체의
Method
만 호출 - 파라미터로 받은 객체의
Method
만 호출 - 필드로 참조하는 객체의
Method
만 호출
- Method에서 생성한 객체의
3. 다형성
- 한 객체가 여러타입을 갖는 것
- 즉 한 객체가 여러타입의 기능을 제공
- 타입상속으로 다형성을 구현
4. 추상화
- 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미있는 표현으로 정의하는 과정
- 아직 존재하지않는 기능에 대한 이른 추상화는 주의
- 실제 변경, 확장이 발생할 때 추상화 시도하는 것이 좋다.
- 구현을 한 이유가 무엇 때문인지 정확하게 알고, 생각해야함.
- 타입 추상화
- 여러구현 클래스를 대표하는 상위타입도출
- 추상타입을 사용하면 코드의 유연함을 가져올 수 있다.
5. 객체 지향적 설계 5대 원칙(S.O.L.I.D)
5_1 SRP(Single Responsibility Principle) : 단일 책임 원칙
- 클래스는 단 하나의 책임을 져야하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
- 이 규칙만 잘지켜도 클래스 구성도가 깔끔하게 정리될 것.
- Divergent Change, Shotgun Surgery (참고)
지켜지지않은 예시
- 변수레벨
- 하나의 속성이 여러의미를 갖는 경우
- 어떤 곳에서는 쓰고, 어떤곳에선 쓰지않은 속성이 있는 경우
- Method 레벨
- 분기처리를 위한 if문이 많을 경우
5_2 OCP(Open-Closed Principle) : 개방-폐쇄 원칙
- 확장에는 열려 있어야하고, 변경에는 닫혀있어야한다.??
- 자신을 확장시키는 것에는 열려있고, 주변의 변화에 대해서는 닫혀있어야한다.
5_3 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램을 정상적으로 동작해야한다.??
5_4 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야한다.??
- 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야한다.
- SRP가 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조한다.
5_5 DIP(Dependency Inversion Principle) : 의존 역전 원칙
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.??
이 원칙들은 객체간의 응집도는 높이고, 결합도는 낮추자는 원칙을 재정립한 것이다.
- inflearn 객체 지향 프로그래밍 입문 강의를 보고 작성한 글입니다.
- velog 링크