1. 조기 반환(early return)
what?
코드 실행 과정이 함수 끝까지 도달하기 전에 반환
why?
코드 가독성↑
예외를 깔끔하고 빠르게 처리
how?
static int totalPrice(int quantity, int price){
int total = quantity * price;
if(total > 100)
return (int)(total * 0.9);
return total;
}
if문에서 total이 100보다 큰 경우 total에 0.9를 곱하고 반환해 조기에 종료하도록 함 -> 예외 처리 불필요
2. 보호 구문(guard clauses)
what?
본격적인 로직을 진행하기 전 예외 처리 코드를 추가
why?
보호 구문 이후 구현부에서 입력값에 대한 예외를 고려할 필요 x
처음부터 예외 고려 -> 더 안전한 코드 작성
how?
static double calculateAverage(List<Integer> numbers){
//보호 구문 1
if(numbers == null)
return 0;
//보호 구문 2
if(numbers.isEmpty())
return 0;
//구현부
int total = numbers.stream().mapToInt(i -> i).sum();
return (double) total / numbers.size();
}
정수 리스트 numbers를 받아 평균을 계산해 반환하는 메서드
보호 구문 1: numbers가 null인지 확인
보호 구문 2: numbers가 비어있는지 확인
stream: 리스트를 스트림으로 변환(IntStream.sum()을 사용하기 위함)
mapToInt(i -> i): 스트림에서 각 요소를 int값으로 변환
- mapToInt(): 스트림의 각 요소에 지정된 함수를 적용, 새로운 IntStream 형성
- (i -> i): 각 요소를 인수로 받아 해당 요소를 그대로 반환
sum(): IntStream의 메서드. 합계를 구함
3. 제네릭(generic)
what?
빌드 레벨에서 타입을 체크하는 기능(타입 지정, 타입 강제)
why?
- 타입 안정성
- 타입 체크와 형변환 생략
how?
//제네릭 사용 x
List list = new ArrayList();
list.add(10);
list.add("abc");
int sum1 = (int)list.get(0) + (int)list.get(1); //런타임 오류 발생
//제네릭 사용
List<Integer> genericList = new ArrayList();
genericList.add(10);
genericList.add("abc"); //문법(빌드 레벨) 오류 발생
int sum2 = genericList.get(0) + genericList.get(1);
1) 제네릭을 사용하지 않는 경우 코드를 실행해야 오류가 발생한다는 것을 알 수 있지만, 제네릭을 사용하면 빌드 자체가 안 되기 때문에 런타임 오류를 방지할 수 있다.
2) 데이터에 접근할 때 형변환을 할 필요가 없다.
코딩 테스트에서는 여러 타입의 데이터를 하나의 컬렉션에 넣어야 할 경우가 거의 없기 때문에 제네릭을 사용하는 것이 좋다.
'코딩테스트' 카테고리의 다른 글
코딩테스트 배열 관련 함수② (0) | 2024.04.23 |
---|---|
코딩테스트 배열 관련 함수 (0) | 2024.04.22 |
자바 코딩테스트 메서드 기초: 람다식 (0) | 2024.04.18 |
자바 코딩테스트 기본 문법 (0) | 2024.04.16 |
알고리즘 효율 분석: 시간 복잡도 (0) | 2024.04.15 |