Effective Java : 아이템 57. 지역변수의 범위를 최소화하라. 지역변수의 범위를 줄이면 가독성이 올라감. 지역변수의 범위를 줄이는 방법 지역변수가 가장 처음 쓰일 때 선언하기 반복문 사용하기 메서드를 작게 유지하고 한 가지 기능에 집중하기 모든 지역변수는 선언과 동시에 초기화 해야 함. 만약 그럴 수 없다면, 지역변수 선언을 미뤄야함을 의미함. Try ~ catch에서 사용될 때는 예외임. 지역변수의 범위는? 지역변수의 범위는 처음 지역 변수가 선언된 지점 ~ 코드 블럭이 끝나는 지점까지다. 아래 코드를 기준으로 살펴보면 지역변수 k, i의 범위는 다음과 같다 k : whereIs() 메서드가 끝나는 지점 i : for문 블록이 끝나는 지점. public void whereIs() { int..
Effective Java : 아이템 58. 전통적인 for 문보다는 for-each 문을 사용하라. 전통적인 for문은 다음 단점이 있음. 불필요한 반복자가 많이 생성됨 → 코드 실수 범위가 넓어짐. (잘못된 변수를 사용해도 컴파일러가 잡아주지 않음) 컬렉션 / 배열이냐에 따라 for문의 코드가 달라짐. for-each를 사용하면 위의 단점을 해결해줌. for-each의 콜론(:)은 "안의(in)"으로 읽으면 됨. for-each를 사용할 수 없는 경우 순회하며 원소를 삭제해야 하는 경우. 순회하며 원소를 교체해야하는 경우. 여러 컬렉션을 병렬로 돌아야 하는 경우 → 이 경우 여러 번의 for-each로 분리해서 가능할 수도 있음. 전통적인 for문을 단점이 존재함. While문 보다는 for문을 사용..
아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라. 빈 컬렉션 대신 null을 반환하면 내부 구현 + 사용하는 쪽에서도 null 처리를 해야하는 번거로움이 발생함. 번거로움이 발생함에도 프로그램 자체에 아무런 이득이 없으므로 빈 컬렉션 / 배열을 반환하는것이 나음. 빈 컬렉션을 계속 반환해서 '객체 생성'으로 인해 '성능 문제 발생'이 명확하다면, 불변 객체를 반환하는 방법으로 개선할 수 있음. (대부분은 필요없는 방법임) 빈 컬렉션을 Null로 특별 취급할 필요가 없다. 아래 코드에서 cheessInStock이라는 Collection이 비어있는 경우 null을 반환하는 코드를 볼 수 있다. 그런데 빈 컬렉션을 굳이 'null'로 특별 취급할 필요가 있을까? 빈 컬렉션을 특별 취급할 필요가 ..
아이템 53. 가변인수는 신중히 사용하라 가변인수 메서드가 호출되면, 가변인수 개수와 동일한 배열이 생성되고 인수가 배열에 저장되어 넘겨짐. 가변인수가 적어도 1개 이상 필요한 메서드에서 가변인수는 안전하지 않을 수 있음. 가변인수의 사이즈를 확인하는 전제조건 검사로 보완 가능. 1개의 값을 명시적으로 받고, 나머지를 가변인수로 받아 더 깔끔하게 보완 가능. 가변인수 메서드가 호출될 때 마다 새로운 배열이 할당되므로 성능에 민감한 경우 병목구간이 될 수 있음. 케이스 분석 후, 오버로딩을 통해서 성능 최적화를 도모해 볼 수 있음. 가변인수는 안전할까? 가변인수 메서드를 호출하면, 가장 먼저 인수의 개수와 길이가 같은 배열을 만들고 인수들을 배열에 저장해서 메서드에 넘겨준다. 메서드에서는 배열로 받기 때문..
들어가기 전 이 글은 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 공부하며 작성한 글입니다. 6. 키-값 저장소 설계 Key-Value Store는 비관계형 데이터베이스다. 많이 알려진 녀석들은 아마존의 Dynamo, Memcached, Redis 같은 것들이 존재한다. 데이터는 다음과 같은 형태로 저장된다. Key Value 145 john 147 bob 문제 이해 및 설계 범위 확정 모든 것을 만족할 수는 없고, 요구 사항을 고려해서 트레이드 오프를 결정해야한다. 요구사항은 다음과 같다. 높은 가용성을 제공해야 함. 시스템은 장애가 있더라도 빨리 응답해야 함. 높은 규모 확장성을 제공해야 함. 트래픽 양에 따라 자동적으로 서버 증설 / 삭제가 가능해야 함. 데이터 일관성 수준은 조정 가능해야 ..