2021 02 09
2021-02-09
자동차 경주 피드백
- 변수명은 객체 입장에서 생각해보자
- number(int randomNumber) 파라미터가 randomNumber로 표시되야 하는가?
- JAVA는 기본 가변, final 넣어줘야 불변
- 클래스 변수의 장/단점은?
- 장점: 메모리의 효율적 사용, 빠르다
- 단점: 프로그램 종료 시점까지 메모리에 할당되어 있음, 디버깅 힘듦, 덜 객체지향 적임
- 언제 static을 써야하지?
- 보통 Utils, Helper 클래스 만드는데 사용
- 내 생각: 객체로 관리할 필요가 없다면, 즉 객체 내부에서 관리할 "상태"가 없다면 static을 사용해도 되지 않을까?
- 인스턴스 변수의 수는 최소화
- 최대한 기존의 인스턴스 변수로 도출해보자
- Test fixture로 테스트 시나리오를 작성해보자
제이슨의 라이브 코딩
- 생성자 vs 메서드
- 클래스에서 메서드 많아지는 것 X
- 클래스에서 생성자 많아지는 것 O
- 사용자에게 사용성을 증대시켜 주는 장치로 해석 가능
- 원시값과 문자열을 포장하라
- Car 객체의 인스턴스 변수 중 하나인 name을 포장
- 포장한다는 것은 Name 클래스를 따로 빼서, 해당 클래스에서 Name에 관한 상태와 행동을 관리
- Name에 대한 validation을 Name 클래스에서 할 수 있음
- Name에 대한 test 코드를 쉽게 작성할 수 있음
- Name에 대한 책임을 Car에서 분리시킴
- 값 객체를 만들어 관리하자!
- 1급 Collection이란?
- [참고]
- https://jojoldu.tistory.com/412
- [정의]
- Collection을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다.
- [장점]
- 비즈니스에 종속적인 자료구조
- 필요한 조건으로만 생성할 수 있는 자료구조 생성
- 검증 로직 해당 클래스에서 해결 가능
- Collection의 불변성을 보장
- final은 오로지 재할당만을 금지, 자료구조의 데이터 추가/삭제는 못막음
- Collection의 값을 변경할 수 있는 메서드를 없앤 Collection을 만들어 주자
- 상태와 행위를 한 곳에서 관리
- 그저 자료구조가 List라면...
- 같은 기능을 하는 메서드를 중복해서 생성할 수 있다
- 어플리케이션이 복잡하고 커질수록 관리가 힘들다
- 이름이 있는 Collection
- 그저 변수명이 달랐던 List들에게 이젠 이름을 부여해 주자!
- 이름이 생기면, 용어 사용과 검색이 용이해진다!
브라운의 개더타운
- final List winners = new ArrayList<>();
- 인터페이스를 자료형으로 쓰면 프로그램은 유연해진다
- 객체의 실제 구현을 다른 것으로 바꾸고 싶으면 생성자 이름만 다른 클래스로 바꾸도록 지원
public class HelloWorld{
public static void main(String []args){
final FpCalculatorService fpCalculatorService = new FpCalculatorService();
System.out.println(fpCalculatorService.calculator((x, y) -> x - y, 10, 20));
// -10 반환
}
}
interface Calculation {
int calculate(int x, int y);
}
class FpCalculatorService {
public int calculator(final Calculation calculation, final int x, final int y) {
return calculation.calculate(x, y);
}
}
- Main 메서드는 어디에?
- Application을 만들어서 Main 메서드를 호출
- 이후 Controller에서 제어를 넘겨 수행
- Controller에서 Main 메서드를 쓰는 것은 오히려 Controller의 역할에 위배될 수도
- Controller의 역할은?
- 클라이언트의 요청 받을 시, 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트 호출
- 모델이 업무를 마치면, 그 결과를 뷰에게 전달
- 모델이나 뷰는 서로의 존재를 모르고, 변경을 외부로 알리고 수신하는 방법만 가진다. 컨트롤러가 이를 중재
- 모델이나 뷰의 변경을 모니터링 해야 한다.