본문 바로가기

전체 글

(80)
[Clean Code] Chapter 18 동시성 2 클라이언트/서버 예제 책에서는 단일 스레드로 동작하던 서버를 다중 스레드로 변경하는 것과 코드를 깨끗하게 변경하는 내용을 다룬다. 우리는 다중 스레드를 적용하기 전에 어플리케이션이 어디서 시간을 보내는지 알아야 한다. I/O - 소켓 사용, 데이터베이스 연결, 가상 메모리 스와핑 기다리기 등에 시간을 보낸다. 프로세서 - 수치계산, 정규표현식 처리, 가비지 컬렉션 등에 시간을 보낸다. 대개 시스템은 둘 다 하느라 시간을 보내지만, 특정 연산을 살펴보면 대개 하나가 지배적이다. 1. 프로그램이 주로 프로세서 연산에 시간을 보내는 경우 새로운 하드웨어를 추가해 성능을 높여 테스트를 통과하는 방식이 적합하다. 프로세서 연산에 시간을 보내는 프로그램은 스레드를 늘인다고 해서 빨라지지 않는다. 왜냐하면 CPU 사..
[Effective Java] 아이템 64 - 객체는 인터페이스를 사용해 참조하라 cf) Item.51 : 매개변수 타입으로 클래스가 아닌, 인터페이스를 사용하라 → 객체는 클래스가 아닌 인터페이스로 참조하라로 확장 적합한 인터페이스만있다면 매개변수뿐 아니라, return, 변수, 필드를 전부 인터페이스 타입으로 선언하자 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 인터페이스를 타입으로 사용하는 습관은 프로그램을 훨씬 유연하게 만들어 준다 // Good Set sonSet = new LinkedHashSet(); Set sonSet = new HashSet(); //유연하게 변경가능 // Bad LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하면 이후 구현 클래스를 교체할 때 새 클래스의 생성자(혹은 다른 ..
[Effective Java] 아이템 63 - 문자열 연결은 느리니 주의하라 String + String 에서의 + : 문자열 연결 연산자는 여러 문자열을 하나로 합쳐주는 편리한 수단 단 한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열을 표현할 때만 사용하자 문자열은 불변이기 때문에 두 문자열을 연결할 경우에는 양쪽의 내용을 모두 복사해야하므로, 문자열 연결 연산자를 통한 문자열 n개의 연산은 O(n^2)이다. 예시 // 청구서의 item을 전부 하나의 문자열로 연결하는 메서드 // 문자열 연결을 잘못 사용한 예 - 아이템이 많아지면 많아질수록 성능저하 public String statement() { String result = ""; for (int i = 0; i < numItems(); i++) { result += lineForItem(i); } return r..