[프로그래머스스쿨/자바 웹 백엔드 개발] 1주차

Jiwon·2022년 10월 10일

[프로그래머스스쿨 / API 서버 개발 미션으로 배우는 자바 웹 백엔드 개발] 에서 수강하며 정리한 글 입니다. 문제가 있을 시, 삭제 하겠습니다.

객체지향의 핵심

IoC(Inversion of Control)를 통해 상위레벨의 모듈을 하위레벨의 모듈로부터 보호하는 것

소스코드의 컴파일 타임 의존성 방향과 런타임 의존성 방향이 다르다.

객체지향

  • 객체지향 프로그래밍은 클래스, 객체, 상속, 다형성, 추상화, 캡슐화 등을 사용하여 프로그램을 설계하는 방법론
  • 그래서 클래스 이름에서 역햘이 보여야하고 역할은 관련된 책임
  • 그러나 상속, 다형성, 추상화, 캡슐화 등이 핵심은 아니다.
  • 객체지향의 핵심은! IoC(Inversion of Control)를 통해 상위레벨의 모듈을 하위레벨의 모듈로부터 보호하는 것
  • 곧, 객체지향설계는 의존성 관리!

객체지향에서 말하는 재사용은 코드를 재사용하는 것이 아니라,
인터페이스르 통해서 사용할 수 있는 것을 재사용이라고 한다.(구현체를 갈아 끼울 수 있는 것)
이유는? 보호하기 위해서.

SOLID.

인터페이스를 항상 생각해서 코드를 작성하는 연습을 하자.

객체지향 모델링 어떻게 할까

  1. 문서적듯이 간단하게 정리

    • 상품 - product - 판매되는 상품
    • 노출된상품 - displayed product - 노출된 상품
    • 숨겨진 리뷰 - hidden review
  2. 타입의 행동과 속성들을 정리

    • product - 상품
      : 이름, 가격, 상품등록일자, 상품수정일자, 리뷰들을 가져야한다.
    • product 추가 add
      : 가격은 0원 이상이어야 등록 가능
      : 생성일 자동으로 추가

user -> Controller -> application/Service -> Domain
: user와 Controller는 유저가 요청한 것에 따라 값을 돌려주는 역할 정도라고 생각.
실제 application과 service에서 어떤 행위와 메세지를 주고 받으면서 기능을 도메인과 협업하여 서비스 제공이 가능하다고 생각한다.
(개인적 견해)

user <-> api <- Domain[application -> domain(entity, repository)] <- memoryRepository(mysql, mongodb)

추상클래스는 동일한 행동을 추상화시키고 공유함에 있어서 쓰이는데
직접 인스턴스 생성은 불가능하다.(객체 생성 불가)
코드의 공유화가 필요하지 않다고 하면, 추상클래스 사용은 비추천

테스트코드

  • 단위 테스트
    작은 범위, 단일 동작 단위 검증, 흔히 겪는 것은 클래스단위의 테스트
    • 기능 추가나 수정하는 동안 테스트를 통해 보호 받을 수 있음, 리팩터링 수월
  • 통합 테스트
    UI를 제외한 여러 계층을 함께 테스트(DB등의 외부 시스템 연동 포함)
  • 전 구간 테스트
    UI를 통해 모든 기능 테스트

Test Double

  • xUnit Test Patterns의 저자가 만든 용어로 '테스트를 진행하기 어려운 경우 이를 대신해 테스트를 진행할 수 있도록 만들어준 객체'를 말한다.
  • 테스트하려는 객체와 연관된 객체를 사용하기가 어렵고 모호할 때 대신해 줄 수 있는 객체를 테스트 더블이라고 한다.
  • mock 으로 더 많이 알려져 있다.

테스트코드 작성시 도움될 만한 것

Given-When-Then / Araange-Act-Assert 패턴으로 연습하자.

객체지향 생활체조

지키며 코딩해보자!

  1. 한 메서드에 오직 한 단계의 들여쓰기만 한다.
  2. else 예약어(keyword)는 쓰지 않는다.
  3. 모든 원시값과 문자열을 포장한다.
  4. 일급(first-class) 콜렉션을 쓴다.
  5. 한 줄에 점을 하나만 찍는다.
  6. 줄여쓰지 않는다(축약 금지).
  7. 모든 엔티티(entity)를 작게 유지한다.
    8. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  8. 게터(getter)/세터(setter)/프로퍼티(property)를 쓰지 않는다.
profile
과연 나는 ?

1개의 댓글

comment-user-thumbnail
2022년 10월 10일

왕,,

답글 달기