정리(9)
-
객체 지향 설계 5원칙 - SOLID
SOLID란 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 의미한다. 객체 지향 프로그래밍에서 장점을 명확히 누리기 위해 결합도는 낮추고 응집도를 높이는 원칙을 객체 지향 관점에서 재정립한 것이라고 볼 수 있다. S - SRP(Single Responsibility Principle, 단일 책임 원칙) O - OCP(Open Closed Principle, 개방 폐쇄 원칙) L - LSP(Liskov Subsitution Principle, 리스코프 치환 원칙) I - ISP(Interface SEgregation Principle, 인터페이스 분리 원칙) D - DIP(Dependency Inversion Principle, 의존 역전 원칙) 으로 구성되어 있다. 이 5가지를 간단하게 정리해봤..
2020.06.29 -
인터페이스와 추상클래스
인터페이스와 추상클래스의 공통점 인터페이스와 추상클래스의 공통점은 추상화에 사용된다. 구현 객체에 독립적인 메소드 제공이 가능하다. 메소드의 선언만 있고 구현 내용은 없다. 자기 자신을 직접 인스턴스 생성할 수 없다. 상속 또는 구현을 통해 객체를 생성할 수 있다. 가 있다. 하나씩 살펴보도록 하겠다. 추상화 public Class CarA { public void 운전하다() { System.out.println("Car A를 운전합니다."); } public void 주차하다() { System.out.println("Car A를 주차합니다."); } } public Class CarB { public void 운전() { System.out.println("Car B를 운전합니다."); } publ..
2020.06.26 -
추상 클래스
추상 클래스란? 하위 클래스에서 구현될 추상적인 기능이 포함된 클래스이다. 즉 추상 클래스에서는 메소드 시그니처만을 제공하고 실제 구현은 하위 클래스에서 이루어진다. 추상 클래스의 특징으로는 추상 클래스이지만 추상 메소드를 가지지 않을 수 있다. 추상 메소드를 하나라도 가진 경우 해당 클래스는 무조건 추상 클래스로 선언해야 한다. 그 자체로 인스턴스 생성이 불가능하다. 상속을 통해 사용 가능하며, 다중 상속은 불가능하다. 추상 메소드를 제외한 나머지 접근 제어자 및 필드는 일반적인 클래스와 동일하게 사용할 수 있다. 클래스 앞에 abstract 키워드를 붙여서 정의한다. 가 있다. 다음으로 추상 클래스를 예제를 통해 이해해보도록 했다. 추상 클래스 문법 public abstract class A { pu..
2020.06.25 -
인터페이스
인터페이스란? 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 기능이다. 상호의존도를 낮추기 위해 어떠한 로직(클래스)를 분리시켰다면, 여러 가지 변수로 인해 개발자의 의도대로 동작하지 않는 것을 방지하는 기능이라고 이해했다. 상호의존도가 낮을 시 코드의 수정이 비교적 자유로워지므로 자바 문법 상 문제가 없지만, 로직 상으로는 개발자의 의도에서 벗어날 수 있기 때문이다. 특히, 각 기능을 모듈화하여 진행할 경우 다른 개발자가 구현한 로직을 사용할 때에 자신이 필요한 로직이 다른 로직과 혼합되어 있거나, 다른 방식으로 표현되는 등의 이슈들이 생길 가능성이 존재한다. 정리하자면 추상화를 통해 각 객체들의 핵심적인 기능을 추출해 이를 상위 개념으로 정의하고, 상위 개념의 핵심 기능들을 구현하도록 강요함으로..
2020.06.02 -
다형성
다형성이란? 다형성(Polymorphism)이란 하나의 클래스 또는 메소드가 필요에 따라 각기 다른 방식으로 동작함을 의미한다. 주로 인터페이스, 추상 클래스에서 오버라이딩(Overriding), 오버로딩(Overloading)을 통해 지원된다. 장점으로는 코드를 간결하게 해준다. 유연한 설계가 가능하다. 가 있다. 유연한 설계는 추상화와 밀접한 관계가 있다고 생각된다. 예시를 통해 하나씩 살펴보도록 했다. 간결한 코드 다형성을 적용하지 않고, 피아니스트와 바이올리니스트의 연주를 표현하려면 아래와 같은 코드가 필요할 것이다. public class Pianist { } public class Violinist { } public class Cellist { } public class Tests { pub..
2020.05.27 -
상속
상속이란? 상속(Inheritance)이란 상위 개념에서 필요한 개념을 하위 개념에서 그대로 사용하거나, 필요 시 확장해서 사용하는 기능이다. 상위 개념이란 상위 클래스에 있는 필드 또는 메소드를 의미한다. 상속의 장점으로는 하위 클래스에서 상속받은 상위 개념을 상위 클래스에서 제어할 수 있기 때문에 유지보수가 좋아진다. 상위 클래스의 개념을 그대로 또는 확장해서 사용하기 때문에 코드의 재사용성이 좋다. 필요할 때마다 하위 클래스를 생성할 수 있기 때문에 생산성이 좋다. 가 있다. 첫 번째 장점인 유지보수는 장점이자 단점이라는 생각도 든다. 상속의 단점으로는 하위 클래스가 상위 클래스에게 의존적이기 때문에 상속에 어울리지 않는 환경일 경우 캡슐화를 위배할 수 있다. 상속을 남발할 경우 관계가 복잡해져 유..
2020.05.25