
약 2주간 Professional 양성 교육에 입과 하게 되었다. 예전에도 비슷한 강의를 들었을 텐데 실무를 몇 년 경험하고 들으니까 또 새롭다. 첫째 날 강의 중 인상 깊었던 부분 정리. 1. 카드 문제 사실 : 모든 카드의 한쪽에는 알파벳이, 다른 쪽에는 숫자가 써 있음. 주장 : 만약 한쪽이 D 이면 반대쪽은 3이다. 주장이 사실인지 확인하기 위해 다음 카드들 중 반드시 뒤집어 보아야 하는 것은 몇 개이고 어느 것인가? 2. 맥주집 문제 규칙 : 20세 이하인 사람은 맥주를 마실 수 없음. 나이 혹은 마시고 있는 것을 표시한 다음 4명 중 확인이 필요한 사람은 몇 명이고 누구인가? 3. Hard vs. Soft Logic 동일한 문제인데 1번보다 2번 문제가 훨씬 더 쉬운 이유는 논리가 아닌 직관을..
이펙티브 자바에 이어서 동기들과 오브젝트: 코드로 이해하는 객체지향 설계라는 도서로 스터디를 시작했다. 아직 3장까지밖에 읽지 않았지만 지금까지 읽었던 어떤 책보다도(몇 권 안되지만···) 객제지향이라는 개념을 지식적이면서도 실질적으로 잘 설명하는 것 같다. 내가 이제야 객체지향 설계의 필요성을 피부로 느꼈고 해당 개념을 이해할 수 있는 지식과 경험이 쌓여서 잘 읽히는 것일 수도 있겠다. 작년 하반기부터 개발해 곧 런칭을 앞둔 신규 프로젝트가 있는데, 이 책을 미리 읽었더라면 해당 프로젝트가 조금 다른 설계(더 객체지향적인, 더 유지보수에 용이한)를 갖게 되지 않았을까 하는 생각이 든다. 지금이라도 순간순간 배우고 이해한 것들을 적용하며 리팩터링 해야겠다.
아이템 85. 자바 직렬화의 대안을 찾으라 아이템 86. Serializable을 구현할지는 신중히 결정하라 아이템 87. 커스텀 직렬화 형태를 고려해보라 아이템 88. readObject 메서드는 방어적으로 작성하라 아이템 89. 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라 아이템 90. 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라 아이템 85. 자바 직렬화의 대안을 찾으라 직렬화의 근본적인 문제는 공격 범위가 너무 넓고 지속적으로 더 넓어져 방어하기 어렵다는 점이다. readObject 메서드는 바이트 스트림을 역직렬화하는 과정을 통해 클래스패스 안의 거의 모든 타입의 객체를 만들어낼 수 있다. 이 말은즉슨, 그 타입들의 코드 전체가 공격 범위에 들어간다는 ..
아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 아이템 79. 과도한 동기화는 피하라 아이템 80. 스레드보다는 실행자, 태스크, 스트림을 애용하라 아이템 81. wait와 notify보다는 동시성 유틸리티를 애용하라 아이템 82. 스레드 안전성 수준을 문서화하라 아이템 83. 지연 초기화는 신중히 사용하라 아이템 84. 프로그램의 동작을 스레드 스케줄러에 기대지 말라 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라 쓰기와 읽기 모두가 동기화되지 않으면 동작을 보장하지 않는다. volatile 한정자는 배타적 수행과는 상관없지만 항상 가장 최근에 기록된 값을 읽게 됨을 보장한다. 프로그램이 잘못된 결과를 계산해내는 오류를 안정 실패(safety failure)라고 한다. synchron..
아이템 69. 예외는 진짜 예외 상황에만 사용하라 아이템 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 아이템 71. 필요 없는 검사 예외 사용은 피하라 아이템 72. 표준 예외를 사용하라 아이템 73. 추상화 수준에 맞는 예외를 던지라 아이템 74. 메서드가 던지는 모든 예외를 문서화하라 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라 아이템 76. 가능한 한 실패 원자적으로 만들라 아이템 77. 예외를 무시하지 말라 아이템 69. 예외는 진짜 예외 상황에만 사용하라 예외는 오직 예외 상황에서만 써야 하고 절대로 일상적인 제어 흐름용으로 쓰여선 안 된다. 특정 상태에서만 호출할 수 있는 '상태 의존적' 메서드를 제공하는 클래스는 '상태 검사' 메서..
아이템 57. 지역변수의 범위를 최소화하라 아이템 58. 전통적인 for 문 보다는 for-each 문을 사용하라 아이템 59. 라이브러리를 익히고 사용하라 아이템 60. 정확한 답이 필요하다면 float와 double은 피하라 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라 아이템 63. 문자열 연결은 느리니 주의하라 아이템 64. 객체는 인터페이스를 사용해 참조하라 아이템 65. 리플렉션보다는 인터페이스를 사용하라 아이템 66. 네이티브 메서드는 신중히 사용하라 아이템 67. 최적화는 신중히 하라 아이템 68. 일반적으로 통용되는 명명 규칙을 따르라 아이템 57. 지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코..
아이템 49. 매개변수가 유효한지 검사하라 아이템 50. 적시에 방어적 복사본을 만들라 아이템 51. 메서드 시그니처를 신중히 설계하라 아이템 52. 다중정의는 신중히 사용하라 아이템 53. 가변인수는 신중히 사용하라 아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 아이템 55. 옵셔널 반환은 신중히 하라 아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라 아이템 49. 매개변수가 유효한지 검사하라 매개변수의 값이 특정 조건을 만족하기를 바랄 때, 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다. 매개변수의 제약을 문서화한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야 한다. 자바 7에 추가된 java.util.Objects.requir..
팀 동기들과 자바 개발자의 교과서와도 같은(?) 이펙티브 자바 스터디를 시작했다. 한 주에 한 장씩 해서 현재는 9장을 공부하고 있다. 교과서 치고는 내용이 꽤 어려워서 깊이 이해 못한 부분도 있지만 실제로 지금 짜고 있는 코드를 리팩터링 할 때 참고하기 좋은 책인 것 같다. 당장 이해 못한 부분도 이런 내용이 있다는 것만 알면 나중에 필요할 때 꺼내 읽을 수 있겠다. 당장 현업이 바쁘다는 핑계로 읽긴 읽고 있으나 깊이 파고 들진 못하고 있다. 일부 열의 있는 동기들 덕분에 +a로 얻어가는 것들이 있는데, 나도 동기들에게 무언가라도 나눠주려면 조금 더 시간과 에너지를 할애해야겠다. 책에서 다루는 것은 대부분 좋은 코드(유지보수가 용이한, 재사용할 수 있는, 가독성이 좋은)를 짜기 위한 방법론에 대한 내용..
- Total
- Today
- Yesterday