Java PlayGround [Java] 자바 플레이그라운드 with TDD, CleanCode 후기 (2) NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드에서 새롭게 배우고 깨닫게 된 내용들을 기록한 글입니다. Part02. Inheritance, Abstract, Functional programming Inheritance 상속을 통한 중복 코드 제거 중복 코드를 별도의 클래스로 분리해보자. extends 부모 클래스의 모든 필드와 메소드를 자식 클래스가 상속하도록 지원하는 keyword 상속을 할 경우 멤버 필드와 메소드를 하위 클래스에서 그대로 상속 Abstract 추상화를 통한 중복 제거 역할이 비슷한 메서드를 추상화 시켜 중복을 제거해보자. abstract 클래스를 추상 클래..
Java PlayGround NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드에서 새롭게 배우고 깨닫게 된 내용들을 기록한 글입니다. . Part01. 단위테스트, TDD . 시작 소트웍스 앤솔러지에서 말하는 객체 지향 프로그래밍을 잘하기 위한 9가지 원칙 한 메서드에서 오직 한 단계의 들여쓰기만 허용하자 else 예약어를 사용하지 말자. 모든 원시 값과 문자열을 포장하자. 한 줄에 점을 하나만 찍자. 축약과 같이 줄여 사용하지 말자. 모든 엔티티를 작게 유지하자. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 말자. 일급 컬렉션을 사용하자. getter/setter/프로퍼티를 사용하지 말자. 단위 테스트 JUnit는 프로덕션 코드를 편리하게 테스트할 수 있도록 도와준다. JUnit 5...
Java Code Conventions 코드를 작성하면서 대부분 이런 고민을 해보았을 것이다. "여기를 띄어 써야 깔끔할까?", "여기는 줄 바꿈을 해야 깔끔할까?" 등등.. 맞춤법이 틀린 것 처럼 코드가 찝찝하게 느껴진 적이 있지 않은가!! . 그렇다면.. 코우드 컨붼션(Code Conventions)이 필요한 때이다. ✏✏✏ . Google Java Style Guide 를 읽어보면서 참고할만한 내용만 간략하게 정리해 보았다. 캠퍼스 핵데이 Java 코딩 컨벤션 도 참고해보면 좋을 듯하다. . 추가로 Code Convention에 참고가 될만한 Clean Code 내용들을 간략하게 남겨보았다. Source File 모든 소스 파일은 UTF-8로 인코딩하기 Unix는 새 줄 문자를 LF(Line Fee..
2021/01/10 - [Books] - [클린 코드: Clean Code] 2. 의미 있는 이름(Meaningful name) 2021/01/11 - [Books] - [클린 코드: Clean Code] 3. 함수(Function) 2021/01/11 - [Books] - [클린 코드: Clean Code] 4. 주석(comment) 2021/01/11 - [Books] - [클린 코드: Clean Code] 5. 형식 맞추기(Formatting) 2021/01/12 - [Books] - [클린 코드: Clean Code] 6. 객체와 자료 구조(Object and data structure) 2021/01/13 - [Books] - [클린 코드: Clean Code] 7. 오류 처리 2021/01/1..
| 14. 점진적인 개선- Sources and Reference * 깨끗한 코드를 짜려면 먼저 지저분한 코드를 짠 뒤에 정리해야 한다.* (일단 프로그램이 돌아간다고 다음 업무로 넘어가지 말고) 깔끔한 작품을 내놓으려면 단계적으로 개선해야 한다.- 테스트 주도 개발(Test-Driven Development, TDD) 기법을 사용해보자. 1. 소프트웨어 설계는 분할만 잘해도 품질이 크게 높아진다2. 적절한 장소를 만들어 코드만 불리해도 설계가 좋아진다.3. 관심사를 분리하면 코드를 이해하고 보수하기 훨씬 더 쉬워진다. || Args 사용법- 123456789101112// 간단한 Args 사용법 (명령행 인수 구문분석기)public static void main(String[] args) { try {..
| 13. 동시성-"객체는 처리의 추상화다. 스레드는 일정의 추상화다" - James O. Coplien || 동시성이 필요한 이유?- 동시성은 결합(coupling)을 없애는 전략 (무엇what 과 언제when 를 분리)- 무엇과 언제를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다.ex) 많은 사용자를 동시에 처리하면 시스템 응답 시간을 높일 수 있음ex) 정보를 나눠 여러 컴퓨터에서 돌리면 대량의 정보를 병렬처리할 수 있음 ||| 동시성과 관련한 일반적인 미신과 오해1. 동시성은 항상 성능을 높여준다?- 때로 성능을 높여준다.- "대기 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만"2. 동시성을 구현해도 설계..
| 12. 창발성(創發性)- || 창발적 설계로 깔끔한 코드를 구현하자 - 대다수는 Kent Beck이 제시한 "단순한 설계 규칙" 네 가지가 소프트웨어 설계 품질을 크게 높여준다고 믿는다..- 다음 규칙을 따르면 설계는 '단순하다'고 말할 수 있다. - Kent Beck1. 모든 테스트를 실행한다.2. 중복을 없앤다.3. 프로그래머 의도를 표현한다.4. 클래스와 메서드 수를 최소로 줄인다. || 단순한 설계 규칙 1: 모든 테스트를 실행하라- 철저한 테스트로 모든 테스트 케이스를 항상 통과하는 시스템은 '테스트가 가능한 시스템'이다.- 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 더불어 높아진다. (하나만 수행하는 클래스, SRP 준수 클래스)- 테스트 케이스 작성이 쉬워지려면 DIP 원칙 적..
| 시스템-- 시스템 수준에서도 깨끗함을 유지하는 방법 || 시스템 제작과 시스템 사용을 분리하라 - 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 연결하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다. ||| Main 분리- 시스템 생성과 시스템 사용을 분리하는 한 가지 방법 - 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고, 나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정-> Application은 main이나 객체가 생성되는 과정을 전혀 모른다. ||| 팩토리- 객체가 생성되는 시점을 Application이 결정할 필요가 생길 경우 Abstract Factory 패턴 사용 - 객체를 생성하는 시점은 Ap..