오브젝트18 Java 객체지향 프로그래밍(Object Oriented Programming)이란 객체지향 프로그래밍(Object Oriented Programming)란(What): 객체지향 프로그래밍이란 객체에 역할을 부여하고 책임을 할당함으로 인해 협력관계를 만드는 것이다. 객체지향 프로그래밍(Object Oriented Programming)을 하는 이유(Why): 유지보수하기 좋은 코드를 짜기 위해서 새로운 요구사항이 생겼을 때 코드를 쉽게 변경하기 위해서 객체지향 프로그래밍(Object Oriented Programming)을 하는 방법(How): 객체에 역할을 부여하고 책임을 할당함으로 인해 협력관계를 만들기 위해서 3가지 과정으로 나누어보았다. 1. 시나리오를 짠다. 예를 들어, 음식점에 고객이 가서 한식 메뉴에 있는 순대국을 주문하는 시나리오를 짠다. 2. 역할(Role), 책임(Re.. 2022. 12. 10. What is Abstract Class, Why & How to use What is Abstract Class: It is a class that contains one or more abstract methods. Why use Abstract Class: For resuseability code. When you want to create a class that is similar to another class. -> You can delete duplicate codes. -> You don't have to modify original class. -> You can use parent class code in child class. How to use Abstract Class: Maek an abstract class. Use extends for inherir.. 2022. 12. 6. 추상 클래스란(What), 사용하는 이유(Why), 사용법(How) 추상 클래스란(What): 하나 이상의 추상 메소드를 포함하는 클래스이다. 추상 클래스를 사용하는 이유(Why): 모든 객체를 클래스로 만들기 보다는, 추상적으로 큰틀의 클래스를 구현하고 싶을 때 사용한다. 코드를 재사용하기 위해 사용한다. 클래스를 추가하고 싶은데 기존의 클래스와 비슷할 경우 사용한다. 기존의 클래스에서 가져와서 새로운 클래스에 추가 및 수정할 경우 사용한다. -> 코드 중복을 제거할 수 있음 -> 기존의 클래스를 전혀 수정하지 않아도 됨 -> 자식 클래스에서 부모클래스의 코드를 사용할 수 있음 추상 클래스 사용법(How): abstract class로 만든다(실제 어플리케이션에서 인스턴스를 생성하지 않아도 되기 때문) extends를 통한 상속을 사용한다. 자식 클래스에서는 부모 클래.. 2022. 12. 6. 6. 메시지와 인터페이스 - 2 코드스피츠 4강 내용 ❗핵심내용: OCP와 제네릭을 통한 해결 if + instanceof 코드를 클라이언트 방향으로 밀어내야함. 클라이언트를 여러개 만들고 매핑해야함 클라이언트층은 서비스를 다룸 객체설계를 시키는 식으로 만들면 되는데 물어보는 식으로 만들기 때문에 안되는거임 →제일 좋은 것은 시키는것. 그래야 영향을 안받음. LSP(리스코프 치환 원칙): 자식형을 부모형으로 완전히 대체할 수 있다. 문제점 원인: 성급한 추상화 기존보다 메서드 개수가 줄어든다면 괜찮다. 기존보다 메서드가 늘어날 경우 문제가 생김 다운캐스팅을 사용하면 안됨 다운캐스팅: OCP 위반을 일으킴 →제너릭을 통해 해결하자 설계 상에서 LSP, OCP를 지키려고 하자 → if + instanceof 를 쓰지 말자. 문제: 추상형에.. 2022. 10. 14. 6. 메시지와 인터페이스 - 1 목차 협력과 메시지 클라이언트-서버 모델 메시지와 메시지 전송 메시지와 메서드 퍼블릭 인터페이스와 오퍼레이션 시그니처 인터페이스와 설계 품질 묻지 말고 시켜라 의도를 드러내는 인터페이스 함께 모으기 원칙의 함정 디미터 법칙은 하나의 도트(.)를 강제하는 규칙이 아니다 결합도와 응집도의 충돌 명령-쿼리 분리 원칙 반복 일정의 명령과 쿼리 분리하기 명령-쿼리 분리와 참조 투명성 책임에 초점을 맞춰라 2022. 10. 14. 5. 책임 할당하기 - 5 🐿️ 4장 초반에 개발한 데이터 중심 설계를 리팩토링하는 과정을 통해 리팩토링으로 책임을 할당하는 방법의 장점을 설명 🗣️ 책임 주도 설계의 대안 1. 메서드 응집도 중요한 것은 메서드의 이름과 메서드 몸체의 의미적 차이 객체로 책임을 분배할 때 가장 먼저 할 일: 메서드를 응집도 있는 수준으로 분해하는 것 → 긴 메서드를 작고 응집도 높은 메서드로 분리하면 각 메서드를 적절한 클래스로 이동하기가 더 수월해짐 작고, 명확하며, 한 가지 일에 집중하는 응집도 높은 메서드는 변경 가능한 설계를 이끌어 내는 기반이 된다. 이런 메서드들이 하나의 변경 이유를 가지도록 개선될 때 결과적으로 응집도 높은 클래스가 만들어진다. 2. 객체를 자율적으로 만들자 어떤 메서드를 어떤 클래스로 이동시켜야 하는가 : 메서드가 .. 2022. 10. 14. 5. 책임 할당하기 - 4 🐿️ 올바른 설계가 됐는지 코드를 통해 검증 🗣️ 구현을 통한 검증 movie의 구현을 고려하지 않고 필요한 메시지를 결정 → movie의 내부 구현을 깔끔하게 캡슐화함 public class Screeening { private Movie movie; private int sequence; private LocalDateTime whenScreened; public Reservation reserve(Custoemr customer, int audienceCount) { return new Reservation(customer, this, calculateFee(audienceCount), audienceCount); } public Money calculateFee(int audienceCount) .. 2022. 10. 14. 5. 책임 할당하기 - 3 🐿️ 3장에서 책임 주도 설계 방법에 대해 좀더 자세히 살펴봄 🗣️ 책임 할당을 위한 GRASP 패턴 1. 도메인 개념에서 출발하기 설계 시작 전에 도메인에 대한 개략적인 모습을 그려보는 것이 좋음 어떤 책임을 할당해야 할때 가장 먼저 고민해야 하는 유력한 후보는 도메인 개념 책임을 할당받을 객체들의 종류와 관계에 대한 유용한 정보를 제공할 수 있다면 충분 설계를 시작하는 것일뿐 도메인 개념들을 완벽하게 정리하는 것은 아님 빠르게 설계와 구현을 진행 도메인 모델: 실용적이면서 유용한 모델이 되게 하기 2. 정보 전문가에게 책임을 할당하라 책임 주도 설계 방식의 첫번째: 애플리케이션이 제공해야 하는 기능을 애플리케이션의 책임으로 생각하기 영화 예매 기능 질문1: 메시지를 전송할 객체는 무엇을 원하는가? →.. 2022. 10. 14. 이전 1 2 3 다음