[우아한테크코스] 2월 23일 TIL
오늘 배운 점 정리
- java 강의
java Exception
- 상속 구조
Throwable -> Exception -> RuntimeException -> NumberFormatException - Checked Exception, Unchecked Exception
- Checked: Exception을 상속, 반드시 확인해야 하는 예외, 컴파일 시점에 처리를 하지 않으면 컴파일 에러가 발생.
메서드에 throws CustomException 등을 명시해서 발생하는 예외를 던질 수 있다.
catch 순서를 명확하게 지정해주면 동시에 여러 예외를 잡을 수 있다.
뿐만 아니라 catch(RuntimeException | CustomException e)와 같이 명시해도 여러 예외를 한꺼번에 처리해도 된다.
여러 catch가 나왔을 때, 직전에 catch에 던져진 에러는 잡지 못한다.(try 범위 안에서의 예외만 처리)
- Checked: Exception을 상속, 반드시 확인해야 하는 예외, 컴파일 시점에 처리를 하지 않으면 컴파일 에러가 발생.
- 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)
로또 피드백
- 메서드 인자 원칙
이상적인 인자의 개수는 0개이다, 3개부터는 가급적 피하고, 4개는 금지이다. - 일급 collection을 쓴다.
포장된 멤버 변수 외에 다른 멤버 변수가 없어야 한다. - 상속(is-a 관계)과 조합(has-a 관계)
객체의 중복을 제거할 때 이용하면 좋다.(lotto와 winningLotto)
상속보다는 조합을 사용하라 - 모든 원시값과 문자열을 포장한다.
로또 번호를 lottoNumber 객체로 포장 - 적절한 collection(자료구조)을 사용하라.
List, Set, Map을 적절하게 사용한다. 적절한게 없으면 나만의 자료구조를 구현한다. - 생성자 대신 정적 팩토리 메서드를 사용하라.
이름을 가짐으로써 객체 생성의 의도를 드러낼 수 있다.
호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.
반환 타입의 하위 타입 객체를 반환할 수 있다.
입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
정적 팩토리 메서드
- 명명법 by 이펙티브 자바
- valueOf(), of(): 인자로 전달되는 값에 해당하는 인스턴스를 반환. type-conversion method
- getInstance(), newInstance(): 보통 자신과 같은 Type의 인스턴스를 반환. singleton 패턴에서 사용
- getType(), newType(): 자신과 다른 Type의 인스턴스를 반환
- 장점
- 이름을 가질 수 있다.
- 호출 될 때마다 인스턴스를 새로 생성하지 않아도 된다.
- 반환 타입의 하위 타입 객체를 반환할 수 있다.
- 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
- 상속이 불가능한 불변타입을 보장한다.
로또 2단계랑 접목
- 정적 팩토리 메서드 적용, 네이밍 공부
- 예외 처리 적용해보기
- BigDecimal의 사용
- 로또 넘버가 45개 넘지 않도록 설계