반응형

CS/OOP 5

[OOP] 좋은 객체 지향 설계의 5가지 원칙이란?(SOLID)

스프링을 공부하면서, 요즘 스프링을 공부하면서 어떻게 코드를 짜야 좀 더 객체지향적으로 짤 수 있을까? 라는 생각이 많이 들었다. 그러던 중 클린코드로 유명한 로버트 마틴(Robert C. Martin's)이 정의한 좋은 객체 지향 설계의 5가지 원칙을 알게 되었다. 5가지 원칙의 앞글자를 따서 SOLID라고 부른다. SOLID 5가지 원칙은 아래와 같다. 한 가지씩 차근차근 알아보자. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방-폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분..

CS/OOP 2021.08.13

상속(inheritance) [JAVA]

상속이란? 객체 지향의 상속(inheritance)은 한 클래스가 기존 클래스의 속성이나 기능(메소드)을 재사용(reuse)하면서 자신의 새로운 속성이나 기능을 추가해서 확장(extend)하거나 기존 기능을 정제하고 개선(refine)하는 구현 방식 부모 클래스 기존 클래스 자식 클래스 확장되거나 개선된 클래스 자식 클래스는 부모 클래스의 모든 속성과 함수들을 상속 받지만, 부모 클래스에서 자식 클래스가 접근할 수 있는 속성과 메소드를 지정 가능 부모 클래스는 한 개 이상의 자식 클래스와 관계를 맺는 계층 구조로 표현 가능 공통 부분을 부모 클래스에, 서로 다른 부분은 자식 클래스에 구현 가능 class Child extends Parent { } 상속은 클래스를 만드는 것과 비슷하게, 코드의 재사용성을..

CS/OOP 2021.03.15

인터페이스(Interface)와 추상 클래스(abstract class) [JAVA]

인터페이스(interface) 사전적 정의 "서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어 주는 부분. 또는 그런 접속 장치" - 표준국어대사전 자바의 인터페이스 함수를 미리 선언하고 구현은 비워놓은 추상 메소드 함수 선언을 지켜서 구현하라는 약속 인터페이스로 선언된 함수들은 다른 클래스에서 구현됨 인터페이스의 장점 두 가지 이미 구현된 것들을 교체하기 쉬움 다중 상속을 해야 하는 경우에 사용 가능 class 클래스이름 implement 인터페이스 이름 { // 인터페이스에서 선언된 함수 구현 코드 // 나머지 코드 } 인터페이스는 상속 관계의 부모 클래스와 유사하게 사용 가능 인터페이스를 구현하는 클래스 객체도 인터페이스 변수에 저장하거나 인자로 전달 가능 인터페이스는 부모 클래스인 것처럼..

CS/OOP 2021.03.15

클래스들의 관계[JAVA]

연관 (association) 두 클래스 사이가 연결됨 클래스 간에 참조가 사용됨 클래스의 멤버 변수로 다른 클래스가 저장됨 의존(dependency) 연관과 비슷하지만 참조를 사용하는 시기가 짧음 메소드 내부에서 다른 클래스 객체를 생성해서 사용 메소드에 인자로 다른 클래스 객체를 전달 받아 함수 내부에서 다른 클래스의 메소드 호출 메소드에서 다른 클래스 객체를 반환하고, 반환 받은 쪽에서 메소드를 호출 집합(aggregation) 두 개는 비슷하지만 전체와 부분의 생명 주기가 일치하는지로 구분 집합은 전체와 부분의 생명 주기가 다름 생성자나 메소드에 입력으로 다른 객체를 전달받아서 멤버 변수에 저장한다면 집합으로 보면 됨 구성(composition) 전체와 부분의 생명 주기가 일치 출처 - 상명대 객..

CS/OOP 2021.03.06

클래스(Class) [JAVA]

클래스 찾기 자바는 단순한 명령문을 실행하려고 해도 무조건 "클래스"를 구현해야 함 좋은 클래스란? 다른 프로그램에서도 사용할 수 있음 확장이 쉬움 고쳐 쓰기 쉬움 일관성과 결합성을 고려해야함 일관성: 클래스는 목적이 있어야 하고 그 목적에 부합해야 함 결합성: 클래스는 다른 클래스에 대한 의존이 적어야 함 일관성 클래스를 구성하는 요소들이 뭉쳐있는 정도 및 연관성을 의미 클래스의 목적을 이룰 수 있도록 관련된 데이터와 그 데이터를 처리하는 함수들만으로 구성 클래스가 어떤 자료(데이터)를 가지곻 있어야 하는지 먼저 생각 그럴 후에 그 자료를 처리하는 코드를 멤버 함수로 구현 결합성 결합은 클래스가 서로 연결되면서 발생 클래스 설계할 때에는 서로간의 결합성이 낮아야함 (loosely coupled) or ..

CS/OOP 2021.02.24
반응형