레벨 로그

sojukang·2022년 4월 18일
1

Java

추상화

  • 무엇인가? 개별적 대상의 공통점을 기준으로 개념화한 것
  • 왜 중요한가? 개발은 무엇을 기준으로 높은 추상화 단계에서 어떻게인 낮은 추상화 단계를 고려하여 추상화 수준을 넘나들며 일어나기 때문에

상속

  • 왜 쓰나? 코드 재활용, 연관 객체 그룹화
  • 언제 쓰나? 정제(refine): 부분적으로 불완전한 클래스를 완전하게 만들 때

인터페이스

  • 왜 쓰나? 객체의 역할을 계약하여 확장 가능한 객체 그룹을 만들기 위해
  • 추상클래스와 차이는? 추상클래스는 코드의 재활용이 중점이나 인터페이스는 유연한 확장이 중점
  • 상속을 원하지 않는 클래스에 final 붙이는 이유? 객체는 자신이 원하는 방향으로 하위 객체를 통제하는 계약을 가져야함. final을 통해 상속하지 말 것이라는 계약을 맺어 미래의 불확실성을 줄인다.

Exception

  • 왜 필요한가? 불확실성을 통제 가능한 상황으로 만들고 분류하여 대응하기 위해
  • Error, Checked, Unchecked 차이는? Error 개발자가 미리 대응할 수 없는 코드 외적 상황
    • Checked 호출하는 쪽에서 복구 가능하다고 믿을 때
    • Unchecked Runtime 환경에서 동적으로 발생할 수 있는 예외

Generics

  • 왜 쓰나? 쓰여야 할 타입을 컴파일 시점에 계약하여 불확실성을 제어하기 위해

String

  • 왜 String은 다른 객체보다 특별한가? 비트 연산을 처리하는 기계와 문자를 사용하는 개발자 사이의 인터페이스가 문자열이기 때문이다. 매우 많은 빈도로 사용되므로 최적화가 필요하다.
  • String은 어떻게 다른 객체보다 특별한가? 사용되는 문자열은 Method Area의 Constant pool에 저장되어 새 객체 생성 없이 재사용된다.

OOP

  • 왜 필요한가? 코드는 목적을 이루기 위해 존재한다. 목적을 작은 단위로 나누고, 그에 필요한 행동과 데이터를 묶어 객체로 추상화하면 각 객체의 협력으로 목적을 이룰 수 있다. 이를 통해 높은 수준의 추상화를 이루는 동시에 여러 객체가 독립적으로 개발되어 생산성, 안정성을 높일 수 있다.

변경 안정성

  • 왜 필요한가? 변화하는 외부 상황에 대응하려면 내부의 불확실성을 줄여야 한다. 이를 위해 불변 객체라는 계약으로 변경가능성을 최소화한다.

Functional Programming

  • 왜 필요한가? OOP의 목적은 변경에 대응 가능한 구조 확립이다. 그러나 객체는 행동은 상태의 변화를 동반한다. 변화는 불확실성을 높인다. 그래서 상태를 변화시키지 않고 부작용이 없는 함수형 프로그래밍이 필요하게 된다.

TDD

  • 왜 쓰나? 빠른 피드백을 통한 개발 효율 증가
    • 어떻게(구현)보다 무엇(역할)을 중심으로 설계 가능
    • 변경에 안정적으로 대응 가능

테스트하기 어려운 객체

  • 어떻게 하나? 테스트 하기 어려운 부분(외부 API, 랜덤)을 객체에서 분리
  • Strategy, DI 인터페이스 도입과 의존성 주입으로 분리
  • Mocking 가짜 객체를 도입하여 I/O, DB 의존 테스트를 분리

MVC

  • 왜 쓰나? 외부 변경에 의한 도메인의 변경을 최소화하기 위해 도메인과 그 외 계층을 분리하는 게 핵심. 그 외 계층은 최소한의 의존성을 가지는 View, Controller로 분리.

결론

레벨 1의 핵심을 정리하면 변하는 것변하지 않는 것을 구분하여 변경 범위를 최소화 시키고 불확실성을 제거하는 것.

profile
기계공학과 개발어린이

1개의 댓글

comment-user-thumbnail
2022년 5월 6일

백엔드의 레벨로그는 이렇게 되어있군요 신기 신기

답글 달기