[우아한테크코스] 2월 23일 TIL

1 minute read

오늘 배운 점 정리

  1. java 강의

java Exception

  1. 상속 구조
    Throwable -> Exception -> RuntimeException -> NumberFormatException
  2. Checked Exception, Unchecked Exception
    • Checked: Exception을 상속, 반드시 확인해야 하는 예외, 컴파일 시점에 처리를 하지 않으면 컴파일 에러가 발생.
      메서드에 throws CustomException 등을 명시해서 발생하는 예외를 던질 수 있다.
      catch 순서를 명확하게 지정해주면 동시에 여러 예외를 잡을 수 있다.
      뿐만 아니라 catch(RuntimeException | CustomException e)와 같이 명시해도 여러 예외를 한꺼번에 처리해도 된다.
      여러 catch가 나왔을 때, 직전에 catch에 던져진 에러는 잡지 못한다.(try 범위 안에서의 예외만 처리)
  • Unchecked: RuntimeException()을 처리하는 경우 throw 표현이 필요 없는 unchecked 예외이다.

예외를 통해 작업할 게 있다면 checked Exception, catch로 예외를 해결할 수 없다면 unchecked Exception을 사용한다.
명확하지 않으면 unchecked Exception을 사용한다.
사실은 global exception handler 가 존재할 텐데 굳이 checked가 필요할가?
-> checked exception은 그거는 에러야! 안돼! 이느낌..? unchecked exception은 그거는 예외지 그거 너가 잘못 입력하면 너가 다시 입력해야지.,.

  • 여러 예외 던지기: public void hi() throws Exception, IllegalArgumentException

  • IllegalArgumentException vs IllegalStateException
    argument: 잘못된 입력이야, 예외처리 runtimeException~ state: 더는 게임을 진행할 수없어 안돼!

  • customException가 생겨야 하는 상황에 대해서 고민하고 적절하게 사용하도록 하자

  • 가변인자 (int ... numbers): 배열, 넣고 싶은 만큼 넣는 것 (https://jackjeong.tistory.com/64)

로또 피드백

  1. 메서드 인자 원칙
    이상적인 인자의 개수는 0개이다, 3개부터는 가급적 피하고, 4개는 금지이다.
  2. 일급 collection을 쓴다.
    포장된 멤버 변수 외에 다른 멤버 변수가 없어야 한다.
  3. 상속(is-a 관계)과 조합(has-a 관계)
    객체의 중복을 제거할 때 이용하면 좋다.(lotto와 winningLotto)
    상속보다는 조합을 사용하라
  4. 모든 원시값과 문자열을 포장한다.
    로또 번호를 lottoNumber 객체로 포장
  5. 적절한 collection(자료구조)을 사용하라.
    List, Set, Map을 적절하게 사용한다. 적절한게 없으면 나만의 자료구조를 구현한다.
  6. 생성자 대신 정적 팩토리 메서드를 사용하라.
    이름을 가짐으로써 객체 생성의 의도를 드러낼 수 있다.
    호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.
    반환 타입의 하위 타입 객체를 반환할 수 있다.
    입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.

정적 팩토리 메서드

  • 명명법 by 이펙티브 자바
    • valueOf(), of(): 인자로 전달되는 값에 해당하는 인스턴스를 반환. type-conversion method
    • getInstance(), newInstance(): 보통 자신과 같은 Type의 인스턴스를 반환. singleton 패턴에서 사용
    • getType(), newType(): 자신과 다른 Type의 인스턴스를 반환
  • 장점
    • 이름을 가질 수 있다.
    • 호출 될 때마다 인스턴스를 새로 생성하지 않아도 된다.
    • 반환 타입의 하위 타입 객체를 반환할 수 있다.
    • 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
    • 상속이 불가능한 불변타입을 보장한다.

로또 2단계랑 접목

  • 정적 팩토리 메서드 적용, 네이밍 공부
  • 예외 처리 적용해보기
  • BigDecimal의 사용
  • 로또 넘버가 45개 넘지 않도록 설계