Java/CleanCode 썸네일형 리스트형 [CleanCode] 부록A 동시성 II 클라이언트/서버 예제 서버 I/O : 소켓 사용, 데이터베이스 연결, 가상 메모리 스와핑 기다리기 emd 프로세서 : 수치 계산, 정규 표현식 처리, 가비지 컬렉션 등 일반적으로 프로그램이 **프로세서 연산에 많은 시간을 보낸다면, 하드웨어를 추가하여 성능을 높여야 한다.**즉, 스레드를 늘린다고 해결할 수 있는 문제가 아니다. 하지만 프로그램이 주로 I/O 연산에 시간을 보낸다면 동시성이 성능을 높여 줄 수 있다. 애플리케이션에서 많은 시간을 보내는 가능성은 크게 2개이다. 스레드 추가하기 서버 살펴보기 결론 I/O에 많은 시간을 보내야 한다. 관련된 코드를 분리시켜 여러개의 클래스로 분리해 단일 책임 원칙을 지켜야 한다. 단일스레드 시스템에서 다중 스레드 시스템으로 변환하고, 성능을 높이기 위해서는 .. [CleanCode] 17장 냄새와 휴리스틱 주석 C1. 부적절한 정보 피하기 다른 시스템에 저장할 정보는 주석으로 적절하지 못한다. 일반적으로 작성자, 최종 수정일, SPR 번호 등과 같은 메타 정보만 주석으로 넣고, 추가적으로 코드와 설계에 기술적인 설명을 하는 수단으로 써야 한다. C2. 쓸모없는 주석 피하기 오래된 주석, 엉뚱한 주석, 잘못된 주석은 더 이상 쓸모가 없다. 쓸모없는 주석은 없애야 한다. C3. 중복된 주석 피하기 코드만으로 충분한데 구구절절 설명하는 주석이 중복된 주석은 좋지 않다. C4. 성의 없는 주석 피하기 단어를 신중하게 선택하고, 간결하고 명료하게 작성해야 한다. C5. 주석 처리된 코드 피하기 주석으로 처리된 코드는 남들이 읽을 때 매우 눈에 거슬리고 매일매일 낡아간다. 이는 해당 모듈을 오염시키고, 읽는 사람을 .. [CleanCode] 16장 SerialDate 리팩터링 첫째, 돌려보자 단위 테스트가 다 구현이 되어있는가? 둘째, 고쳐보자 법적인 정보는 필요하기 때문에 라이선스 정보와 저작권은 보존한다 변경이력은 소스 코드 제어 도구가 있으므로 하지 않아도 된다. import 문은 java.text.* *와 java.util.**로 줄인다. Javadoc 주석은 HTML 태그를 사용한다. 그러나 하나의 소스코드에 여러 언어를 사용하는 것은 지양하는 방식이기 때문에 주석 전부를 로 감싸는 편이 좋다. 오래된 주석은 고쳐서 개선하기 일반적으로 기반 클래스는 파생 클래스를 모르는 것이 좋기 때문에 추상 팩토리 패턴을 적용한다. 🔹 추상 팩토리 패턴 상세화된 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공.. [CleanCode] 15장 JUnit 들여다보기 JUnit 프레임워크 우리가 살펴볼 모듈은 문자열 비교 오류를 파악할 때 유용한 코드다. ComparisonCompactor라는 모듈로, 영리하게 짜인 코드다. ComparisonCompactor는 두 문자열을 받아 차이를 반환한다. // ComparisonCompactorTest.java package junit.tests.framework; import junit.framework.ComparisonCompactor; import junit.framework.TestCase; public class ComparisonCompactorTest extends TestCase { public void testMessage() { String failure = new ComparisonCompactor(0,.. [CleanCode] 14장 점진적인 개선 Intro 확장성이 부족했던 모듈을 소개하고, 모듈을 개선하고 정리하는 단계를 살펴볼 것. 14-1 간단한 Args 사용법 public static void main(String[] args) { try { Args arg = new Args("l, p$, d*", args); boolean logging = arg.getBoolean('l'); int port = arg.getInt('p'); String directory = arg.getString('d'); ececuteApplication(logging, port, directory); } catch (ArgsException e) { System.out.println("Argument error: %s\n", e.errorMessage()); .. [CleanCode] 13장 동시성 🔹 요약 ◽ 동시성과 깔끔한 코드는 양립하게 어렵다. ◽ 스레드를 하나만 실행하는 코드는 짜기가 쉽다. 겉으로 보기에는 멀쩡하나 깊숙한 곳에 문제가 있는 다중 스레드 코드도 짜기 쉽다. 이런 코드는 시스템이 부하를 받기 전까지 멀쩡하게 돌아간다. 🔹이 장에서 다룰 내용 ◽ 여러 스레드를 동시에 돌리는 이유 ◽ 여러 스레드를 동시에 돌리는 어려움 ◽ 동시성을 테스트하는 방법과 문제점 동시성이 필요한 이유? 동시성은 결합(coupling)을 없애는 전략이다. 즉, 무엇(what)과 언제(when)을 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접하다. 그래서 호출 스택을 살펴보면 프로그램 상태가 곧바로 드러난다. 흔히 단일 스레드 프로그램을 디버깅하는 프로그래머는 정지점(breakpo.. [CleanCode] 12장 창발성(創發性) 창발적 설계로 깔끔한 코드를 구현하자 🔹 켄트 백이 제시한 단순한 설계 규칙 네 가지 ◽ 모든 테스트를 실행한다. ◽ 중복을 없앤다. ◽ 프로그래머 의도를 표현하라. ◽ 클래스와 메서드 수를 최소로 줄여라 . 단순한 설계 규칙 1: 모든 테스트를 실행하라 설계는 의도한 대로 돌아가는 시스템을 내놓아야 한다. 테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템, 즉 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 높아진다. 크기가 작고 목적 하나만 수행하는 클래스가 나온다. SRP를 준수하는 클래스는 테스트가 훨씬 더 쉽다. 테스트 케이스가 많을 수록 개발자는 테스트가 쉽게 코드를 작성한다. 결합도가 높으면 테스트 케이스를 작성하기 어렵다. 그러므로 DIP와 같은 원칙을 적용하려 애써서 .. [CleanCode] 11장 시스템 도시를 세운다면? 도시를 구상한다면? 도시에는 수도 관리팀, 전력 관리팀, 교통 관리 팀, 치안 관리팀, 건축물 관리팀과 같이 각 분야를 관리하는 팀이 있듯, 큰 그림을 그리는 사람도 있으며, 작은 사항에 집중하는 사람들도 있다. 이를 통해 도시가 잘 돌아갈 수 있다. 도시는 적절한 추상화와 모듈화 덕에 큰 그림을 이해하지 못할지라도 개인과 개인이 관리하는 '구성요소'는 효율적으로 돌아간다. 소프트웨어 팀도 도시처럼 구상한다. 깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다. 이 장에서는 높은 추상화 수준, 즉 시스템 수준에서 깨끗함을 유지하는 방법을 알아보자. 시스템 제작과 시스템 사용을 분리하라 🔹 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 '연결'하는) .. 이전 1 2 3 다음