일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 우테코
- 서블릿
- AWS
- JUnit5
- 백준
- 세션
- yml
- Docker
- AOP
- 자바
- Level2
- 프로그래머스
- 우아한세미나
- 스프링부트
- MSA
- 코드리뷰
- REDIS
- Paging
- 프리코스
- 트랜잭션
- 미션
- 의존성
- CircuitBreaker
- 우아한테크코스
- HTTP
- 스프링 부트
- JPA
- mock
- 레벨2
- Spring Batch
- Today
- Total
늘
우테코 Lv1 강의 정리 본문
테스트 코드
@DisplayName()을 사용하면 아스키코드 warning이 안뜨므로 운영할떄 로고가 안찍혀서 좋다.
리펙토링을 할때는 기존의 테스트 코드가 깨지지않도록 해야한다!
private 매서드 테스트할떄
로직을 테스트 코드 작성하는 곳에 가져와서 테스트를 돌려본다..
JDK11 타입 추론
final을 붙여서 타입 불변으로 해주는게 좋다.
뭐든 커지면 의심하자
패키지가 커지면 응집도에 관해 의심해보고, 매서드가 커지면 단일책임 원칙에 대해서 의심해보자...
Static 언제 사용하는게 좋나?
util 클래스와 같은 곳 , 상태관리를 안해도 되므로, 생성자를 private으로 하여 인스턴스화를 막기도 한다.(util이라는 것을 명확히 보여주기 위해)
값을 비교할 때, 이상? 초과? 어떤 방식을 이용하는게 좋을까
값을 비교할때는 매서드에 감추어서 표현을 우선 생각을 하자. 이때 명시적인 이름을 주어 가독성을 높이고, 매서드에 감추지 못하는 경우에는 상황에 따라 적용하자!
getter 왜 쓰지말라고 하는가..?
domain에서 dto로 변환을 위한 getter는 허용이다. 비즈니스 로직을 구현할때 getter/setter를 사용하지 말자는 뜻 이다.
도메인 내에서 DTO를 만들지 말자. dto수정에 따라 도메인이 수정되지 않도록 하기 위해, dto는 잦은 변화가 일어나기 떄문에
Generic
제네릭 타입의 컬렉션은 불공변을 가지기 때문에, 한정적 와일드카드를 사용해서 API유연성을 높일수 있다.(Effective java. item31)
interface Animal{ }
class Dog implements Animal
class Cat implements Animal
상한에서 new Box<>(new Dog()); 와 같이 사용이 가능하다 하지만 new Box<>(new Object())는 안된다.
하한에서는 new Box<>(new Object());가 가능하다.
간단히 add같은 생성할땐 extends를 사용하고, 소비할 때는 super를 사용하는 것을 추천한다고 한다.
String
StringBuilder : (java 1.5에 출시) 스레드 세이프하지 않다.
StringBuffer: (java 1에 출시) 스레드 세이프
문자열을 concat할 때, 멀티스레드 환경에서 처리 해야하나. 싱글 스레드에서 처리하면 되지 않는가 -> overEngineering(StringBuffer)라고 생각해볼수 있겠다.
Enum vs 상수
enum은 상수들을 관리하고 로직을 넣을수 있다. 단순한 상수들 사용이라면 private static final로 선언해주고,
활용해야 한다면, Enum을 통해서 관리해주자.
Enum은 싱글톤이다. Enum{ ADD, MINUS } ADD, MINUS 각각이 하나의 객체라고 봐도 된다.
클래스 하나당 하나의 인스턴스
싱글톤
정적 팩토리 매서드도 싱글톤으로 만드는 방식이다. 메모리를 한 번만 할당하므로 메모리에 이득이 있다.
기본 생성자는 private으로 막아두는게 좋다.
else, switch문 사용하지 말자
- 기능이 추가될때마다 메서드 내의 구현이 변화해서
- 일부 경우는 다형성으로 극복할 수 있기 때문이다.
- 상태 패턴을 활용해 보자
기존의 if문에서 변화
Enum Operator{}
return operator.execute(a, b);
Exception
Exception은 checked execption - catch해줘야만 처리가 가능하다.
RuntimeException은 Unchecked exception - 컴파일 타임에 확인할수 없다.
예외 처리 방법 4가지
회피, 복구, 전환, 무시
- 복구
- 내부 매서드에서
- 회피
- 전환
- 무시
표준 예외 vs 커스텀 예외
커스텀 예외가 시각적이어서 좋은데, 예외가 많아지면 클래스가 많아져서 아쉽다.
Collection에서 바로 String으로 반환
userNames.stream().collect(Collectors.joining(",")));
추상화 = 확장성
금액을 지불할때 금액을 지불한다 까지만 알고 현금, 신용카드, 카페 등 뭘로 지불했는지는 모른다.
'우아한테크코스 4기' 카테고리의 다른 글
리눅스 명령어와 권한 설정 chmod (0) | 2022.06.01 |
---|---|
Junit5 테스트 동작 방식과 빈 주입 (0) | 2022.05.10 |
[Exception]checked Exception vs unchecked Exception (0) | 2022.04.25 |
우아한 한 달 생활기 (0) | 2022.03.28 |
[git] cherry-pick (0) | 2022.03.02 |