본문 바로가기

반응형

나(다)

(27)
이펙티브 자바 - 11장 : 동시성 동시성 스레드는 여러 활동을 동시에 수행할 수 있게 해주지만 단일 스레드 프로그래밍보다 동시성 프로그래밍이 어렵고 잘못될 수 있는 일이 늘어나고 문제를 재현하기도 어려워진다. 하지만 오늘날 어디서나 쓰이는 멀티코어 프로세서의 힘을 제대로 활용하려면 반드시 내 것으로 만들어야 하는 기술이다. 아이템 78 : 공유 중인 가변 데이터는 동기화해 사용하라 동기화는 배타적 실행뿐 아니라 스레드 사이의 안정적인 통신에 꼭 필요하다. synchronized 키워드를 이용하면 매서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다. 객체를 하나의 일관된 상태에서 다른 일관된 상태로 변화시키고 동기화를 제대로 사용하면 어떤 메서드도 해당 객체가 일관되지 않은 순간을 볼 수 없을 것이다. 동기화는 일관성이 깨진 상태를 볼..
이펙티브 자바 - 10장 : 예외 예외 예외를 잘 활용하면 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못 사용하면 반대의 효과가 나타난다. 아이템 69 : 예외는 진짜 예외 상황에만 사용하라 try { int i = 0; while(true) { // 절대 좋지 않은 코드 range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e){ } for (Mountain m : range) { // 표준적인 관용구로 하면 이해하기 쉽고 try는 필요하지 않다, m.climb(); } 예외를 완전히 잘못 사용한 예시이다. 무슨 일을 하는 코드인지 알 수 없고 직관적이지 않다. 예외를 이용해 성능을 높이려는 잘못 된 추론 예외는 예외 상황에 쓸 용도로 설계되었으므로 JVM 구현자 입장에서는 명..
이펙티브 자바 - 9장 : 일반적인 프로그래밍 원칙 일반적인 프로그래밍 원칙 지역변수, 제어규ㅜ조, 라이브러리, 데이터 타입, 그리고 리플렉션과 네이티브 메서드를 다루고 최적화와 명명 규칙을 논한다. 아이템 57 : 지역변수의 범위를 최소화하라 이번 아이템은 기본적으로 "클래스와 멤버의 접근 권한을 최소화하라"라고 했던 아이템15와 취지가 비슷하다. 지역 변수의 범위를 최소화 하는 방법 지역 변수의 범위를 줄이는 가장 강력한 기법은 '가장 처음 쓰일 때 선언하기'다. 미리 선언해두면 코드가 어수선해지고 가독성이 떨어지고 사용 시점에는 초기 값이 기억나지 않을 수도 있다. 거의 모든 지역변수는 선언과 동시에 초기화해야 한다. 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다. 검사 예외를 던질 가능성이 있으면 try 안에서 초기화 ..
이펙티브 자바 - 8장 : 메서드 메서드 아이템 49 : 매개변수가 유효한지 검사하라 생성자와 메서드의 입력 매개변수의 값은 보통 인덱스 값은 음수이면 안되며, 객체 참조는 null이 아니어야 한다. 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다. 매개변수 검사를 제대로 하지 못하면 발생하는 문제 매개변수 검사에 실패하면 실패 원자성을 어기는 결과를 낳을 수 있다. 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 메서드가 잘 수행되지만 잘못된 결과를 반환할 수도 있다. 메서드는 문제 없이 수행되지만, 어떤 객체를 이상한 상태로 만들어놓아서 미래의 알 수 없는 시점에 해당 메서드와는 관련 없는 오류를 낼 수 도 있다. 매개변수의 제약을 어겼을 때 발생하는 예외도 함께 문서화 해둔다. /** ..
읽기 좋은 코드가 좋은 코드다 1장 - 표면적 수준에서의 개선 특정한 단어를 사용하라 : get 대신 fetch나 download 꼭 그래야 하거나 좁은 의미 단순 사용이 아닌경우에는 tmp와 같은 보편적인 이름의 사용을 피하라 구체적인 이름을 이용하라 : ServerCanStart()는 CanListenOnPort()에 비해 의미가 모호하다. 변수명에 중요한 세부 정보를 덧붙여라 : ~_ms이거나 ~_size 사용범위에 따라 이름의 길이를 조절하라. 대문자나 밑줄 등을 의미 있는 방식을 활용하라 이름에 정보 담기 재치 있는 이름보다 명확하고 간결한 이름이 더 좋다. retval이라는 이름은 정보를 제대로 담고 있지 않다. 대신 변수 값을 설명하는 이름을 사용하라. tmp라는 이름은 대상이 짧게 임시적으로만 존재하고, 임시적 존재 자..
내 삶의 주인으로 산다는 것 내 삶의 주인으로 산다는 당연한 말이지만 그렇게 살고 있지 않다고 느낀다. 다시 생각해 보면 결국 지금의 나는 순간순간을 적극적으로 선택한 결과인 건 변함이 없다. 하고자 하는 일과 하고 있는 일, 오늘이나 지금이 맞게 가고 있는지 뒤돌아볼 겨룰 없이 지내는 것도 방법이지만 가끔은 잘 하고 있나 멈춰서 곰곰히 생각해보고 싶은 때가 있다. 나중에 때가 되면 이걸, 저걸, 뭘 하고 싶다고 하는데 감흥이 없다. 예전에는 때가 아니라고 생각했고 지금은 당장에라도 할 수 있는데 안하는거라는 생각이 든다. 정해진 루틴에 지내다보면 익숙해져 루틴을 벗어나기가 두렵다. 실패에 대한 걱정과 두려움이 앞선다. 정말 원하는게 무엇인지, 이대로 괜찮은지, 더 나아지려면 어떻게 해야 할지 고민해볼 필요가 있다. 인생에 정답은 ..
이펙티브 자바 - 7장 : 람다와 스트림 람다와 스트림 아이템 42 : 익명 클래스보다는 람다를 사용하라 특정 함수나 동작에 사용하는 인터페이스를 함수 객체라하며 메서드를 하나만 담은 인터페이스를 의미한다. 익명 클래스 방식은 코드가 너무 길어서 자바는 함수형 프로그래밍에 적합하지 않았다. 람다식이 나오면서 문백을 살펴 타입을 추론해주어 한결 간략한 코드가 된다. public class Item42 { public static void main(String[] args) { List words = new ArrayList(); Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s..
이펙티브 자바 - 6장 : 열거 타입과 애너테이션 6장 열거 타입과 애너테이션 자바에서는 특수한 목정의 참조 타입이 있는데 하나의 클래스의 일종인 열거 타입이고, 인터페이스의 일종인 애너테이션이다. 아이템 34 : int 상수 대신 열거 타입을 사용하라 정수, 문자열 열거 패턴의 단점 public static final int APPLE_FUJ = 0; public static final int APPLE_PIPPIN = 1; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; int i = (APPLE_FUJI - ORANGE_TEMPLE) / APPLE_PIPPIN; // 사과 주스를 만들려고 했지만 오렌지를 잘못 첨가했는데 오류가 아니다. 정수 열거..

반응형