book Modern Java in Action #6 Collector : 스트림 요소를 어떤 방식으로 뽑아낼지 미리 정의해 둔 인터페이스 Java8 이전의 명령형 코드에서는 그룹화 등을 위해 데이터를 모을 때 다중 루프와 조건문을 추가하기 때문에 가독성과 유지보수성이 떨어지지만, 선언형 프로그래밍에서는 필요한 컬렉터를 쉽게 추가함으로써 가독성과 유지보수성을 향상시킬 수 있습니다. 스트림에 collect 메서드를 호출하면 스트림의 요소에 컬렉터... Modern Java In ActionbookModern Java In Action 클린코드 핵심 정리 (1장 깨끗한 코드, 2장 의미 있는 이름) 성능이 나쁜 코드 불필요한 연산이 들어가서 개선의 여지가 있는 코드 의미가 모호한 코드 이해하기 어려운 코드, 네이밍과 그 내용이 다른 코드 중복된 코드 나쁜 코드는 깨진 유리창 처럼 계속 나쁜 코드가 만들어지도록 한다. 나쁜 코드는 팀 생산성을 저하시킨다. 기술 부채를 만들어 수정을 더 어렵게 한다. 새로운 시스템을 만들어야 한다. 일정 안에 새로운 기능을 완성해야 한다.(하지만.. 나쁜 ... 한달한권book클린코드book 클린코드 핵심 정리 (6장 객체와 자료구조) 비지니스 로직 없이 순수 데이터를 저장하는 자료구조의 역할이다. 객체 위의 코드는 생성자에 비즈니스 로직과 관련된 코드가 들어가 있고, 필드를 private 으로 하여 자료를 숨겼다. 만약 Triangle 이라는 새로운 클래스(자료구조가) 추가된다면? area() 함수 안에 if-else 문을 수정해야 한다. 절차적인 코드는 새로운 자료구조를 추가하기 어렵다. 함수를 고쳐야 한다. 객체 만약... 한달한권book클린코드book 클린코드 핵심 정리 (5장 형식 맞추기) 내 for 문은 뭐지..? 이제 이해하기 좋다! 가독성에 필수적이다 코드를 수월하게 읽어나갈 수 있다. 아마추어처럼 보이지 않는다. 포맷팅으로 인해 코드를 잘못해석해 버그를 발생할 위험을 줄인다! ~200 lines < 500 lines 200라인 "코드 길이를 200줄 정도로 제한하는 것은 반드시 지킬 엄격한 규칙은 아니지만, 일반적으로 큰 파일보다는 작은 파일이 이해하기 쉽다" -> 현업... 한달한권book클린코드book 클린코드 핵심 정리 (4장 주석) 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 자신이 저지른 난장판을 주석으로 설명하지 말고 개선하는데 시간을 보내야 한다. 코드로도 의도를 표현할 수 있다! 코드의 변화에 따라가지 못하고, 주석은 방치된다. 코드는 컴파일되어 호출되지만, 주석은 그저 주석이기 때문에 그 자리에 방치되고 결국 의미없는 텍스트가 되어버린다. 구현에 대한 정보를 제공한다. 의도와 중요성을 ... 한달한권book클린코드book 1. 오브젝트와 의존관계 - DAO의 분리 1.2.1 관심사의 분리 객체지향 세계에서는 비즈니스 요구사항에 따라서 오브젝트에 대한 설계가 변할 수 있다. 즉, 오브젝트를 구현한 코드가 변할 수 있다는 것 이다. 객체지향 설계와 프로그래밍이 이전의 절차적 프로그래밍에 비해 좀 더 번거러운 작업을 요구하는 이유도 여기에 있다. 객체지향 설계의 변화에 효과적으로 대처할 수 있다는 특징 때문이다. 변화에 대응할 수 있는 가장 좋은 대책 : ... book토비의 스프링 3.1SpringSpring 클린코드 핵심 정리 (SOLID, 3장 함수) 한 클래스는 하나의 책임만 가져야 한다 OCP 의 목표는 해당 클래스의 기존 동작을 변경하지 않고 클래스의 확장하는 것을 목표로 한다. 서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다. 즉, 자식 클래스가 부모 클래스와 동일한 작업을 수행할 수 없는 경우 버그가 발생할 수 있다라는 의미 자식 클래스는 부모 클래스가 할 수 있는 모든 것을 할 수 있어야 하며 이 프로세스를 상속이라고 한... SOLID한달한권book클린코드SOLID 클린코드 핵심 정리 (7장 예외처리) 하지만 예외를 던지는 것이 명확하고, 처리 흐름이 깔끔해진다. 오류가 발생한 부분에서 예외를 던진다. (별도의 처리가 필요한 예외라면 checked exception으로 던진다.) 예외를 처리할 수 있는 곳에서 catch하여 처리한다. Exception을 상속하면 Checked Exception 명시적인 예외처리가 필요하다. C#은 확인된 예외를 지원하지 않는다. 영웅적인 시도에도 불고하고 ... 한달한권book클린코드book 1. 오브젝트와 의존관계 - DAO의 확장 이전 장에서 "객체지향 세계에서는 비즈니스 요구사항에 따라서 오브젝트에 대한 설계가 변할 수 있다." 라고 했다. 그런데 여러 오브젝트들은 서로 다른 변화의 성격을 갖고 있다. 변화의 성격이 다른 것을 분리해서, 서로 영향을 주지 않은 채로 각각 필요한 시점에 독립적으로 변경할 수 있게 하기 위해서다. 이번에는 관심사가 다르고 변화의 성격이 다른 코드를 완전히 독립적인 클래스로 만들어서 분리... book토비의 스프링 3.1SpringSpring 클린코드 핵심 정리 (8장 경계) 오픈소스, 라이브러리를 안쓰는 프로젝트는 없다. 우리가 만든 코드에 외부에서 들어온 코드를 병합해야 한다. 외부 코드는 외부에서 만든 코드인데, 외부 시스템과 호출하거나 단순히 외부에서 만들어진 코드일 수 있다. 우리 코드와 외부 코드를 깔끔하게 통합시키기 위해 경계를 잘 지어야 한다. 객체의 실제 구현을 외부로부터 감추는 방식 Sensor를 관리해야 한다. Sensor는 외부에서 사용된다.... 한달한권book클린코드book 1. 오브젝트와 의존관계 - IoC IoC는 Inversion of Conrol (제어의 역전)의 약자이다. 1.4.1 오브젝트 팩토리 현재 UserDao의 클라이언트 오브젝트인 main은 2개의 관심사를 갖고 있다. UserDao와 ConnectionMaker 구현 클래스의 오브젝트를 만드는 것 그렇게 만들어진 두 개의 오브젝트가 런타임 시점에 연결돼서 사용(테스트)되는 것 위 2개의 관심사 까지 분리해보도록 하겠다. fac... book토비의 스프링 3.1SpringSpring [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 들어가며~Ch.1 스프링뿐만 아니라 인프라/배포도 넓고 얕게 다루는게 마음에 든다. 겸사겸사 자바&스프링과도 친해지고 서버&인프라&배포에 대한 이해도 높이고 싶다. localhost:8080 뿐만 아니라, AWS로 URL 주소 할당, CI/CD 환경 갖춰볼 수 있다. 1-5장: 스프링 부트 애플리케이션 만들기 무료 버전의 경우도 자바 개발에 대한 모든 기능이 지원된다. 인텔리제이만 바로 설치하는 것도 되지만,... JavabookSpringJava 클린코드 핵심 정리 (10장 시스템) 소프트웨어 시스템은 (어플리케이션 객체를 제작하고 의존성을 서로 연결 하는) 준비 과정과 (준비 과정 이후에는 이어지는) 런타임 로직을 분리해야 한다. 객체의 생성과 객체를 사용하는 부분을 분리한다. 객체의 생성은 시작 단계에서, 비즈니스 로직은 객체를 사용하는데 집중한다. main 함수에서 시스템에 필요한 객체를 생성한 후 어플리케이션에 넘긴다. 어플리케이션은 그저 만들어진 객체를 사용한다... 한달한권book클린코드book 클린코드 핵심 정리 (10장 클래스) 클래스가 맡은 책임이 한 개인가 함수와 마찬가지로 클래스도 작아야 한다. 클래스 설명은 만일(if), 그리고(and), 하며(or), 하지만(but)을 사용하지 않고 25단어 내외로 가능해야 한다. ⇒ 책임이 한 가지여야 한다. SRP 해야 한다. 자잘한 단일 클래스가 많아지면 큰 그림을 이해하기 어렵다고 우려한다. 하지만 작은 클래스가 많은 시스템이든 큰 클래스가 몇 개뿐인 시스템이든 돌아... 한달한권book클린코드book 2. 테스트 - main (UserDaoTest) 다시보기 스프링에서의 테스트 테스트 변화한 코드에 대한 확신을 줄 수 있는 테스트 기술 1장에서 만든 UserDao가 기대했던 대로 동작하는지 확인하기 위해 간단한 테스트 코드 (main 클래스)를 만들었다. 테스트 : 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 1장에서 만들었던 main( ) 테스트 코드 이다. 이 테스트 코드 내... Spring토비의 스프링 3.1bookSpring 2. 테스트 - main (UserDaoTest) 개선 main (UserDaoTest)에는 두 가지 문제점이 있다. 수동 확인(테스트 검증) 작업의 번거로움 2.2.1 테스트 검증의 자동화 현재 테스트를 통해 검증하고 싶은 사항은 두 가지 이다. add( )에 전달한 User오브젝트의 정보가 빠짐없이 DB에 등록되었는지 add( )를 통해 DB에 등록된 User오브젝트의 정보를 DB에서 정확히 가려왔는지 get( )통해 다시 DB에서 가져온 U... Spring토비의 스프링 3.1bookSpring Mac Book에서 Java 환경 변수를 설정하는 방법 Mac 시작 로드 파일 위치(환경 변수 설정 가능) (1) 먼저 당신이 사용하는 맥 OS X가 어떤 셸인지 알고 명령을 사용해야 한다 만약 출력이: csh 또는 tcsh라면, 당신이 사용하는 것은 C Shell입니다. 만약 출력된 것이 bash,sh,zsh라면, 당신이 사용하는 것은 아마도 Bourne Shell의 변종일 것입니다. Mac OS X 10.2 이전의 기본값은 C Shell입니다... macbookjava환경 변수 클린코드 챌린지 #7 오늘 읽은 범위 오류 처리 오류가 발생하면 예외를 던지자 => 논리가 있는 호출자 코드가 오류처리 코드와 뒤섞이는 복잡한 상황을 만들지 않기 위함 Try-Catch-Finally 문부터 작성하라 - 예외가 발생할 코드를 짤 때는 try-catch-finally문으로 시작하자 - 단위 테스트 시 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하자 => try블록... bookTIL코딩노마드북클럽노개북개발자TIL [Book] TDD, 켄트 벡 2부 xUnit 예제 테스트툴(xUnit)을 테스트 주도 개발로 만들어보기 체크포인트를 만들어서 테스트하기전에는 'None' , 테스트를 마치면 '1'을 출력해주자 다음은 testMethod를 직접 호출하는 대신 진짜 인터페이스인 run()을 사용한다. WasRun은 작동했는지 여부를, TestCaseTest는 참, 거짓 여부를 알려준다. 테스트를 하다보면 발생하는 3가지 패턴 (Bill Wake의 3A) 2,3... TDDbookTDD 비전공자를 위한 이해할 수 있는 IT 지식 그동안 내가 구상한 그대로 프로그램이 동작했고, 백준이나 프로그래머스 문제를 푸는 과정이 즐거웠다. servlet이 이런 거구나... 그럼 자바스크립트이랑 서블릿과 JSP가 왜 공존하는거지? 쿠키와 세션이 이런 거구나... 그런데 서버와 클라이언트는 방금 이해했는데 다시 모르겠다... 그렇게 찾게 된 비전공자를 위한 이해할 수 있는 IT 지식은 제목부터 적절했다. 1년 전쯤인가 AWS로 떠들... book_ITbookbook
Modern Java in Action #6 Collector : 스트림 요소를 어떤 방식으로 뽑아낼지 미리 정의해 둔 인터페이스 Java8 이전의 명령형 코드에서는 그룹화 등을 위해 데이터를 모을 때 다중 루프와 조건문을 추가하기 때문에 가독성과 유지보수성이 떨어지지만, 선언형 프로그래밍에서는 필요한 컬렉터를 쉽게 추가함으로써 가독성과 유지보수성을 향상시킬 수 있습니다. 스트림에 collect 메서드를 호출하면 스트림의 요소에 컬렉터... Modern Java In ActionbookModern Java In Action 클린코드 핵심 정리 (1장 깨끗한 코드, 2장 의미 있는 이름) 성능이 나쁜 코드 불필요한 연산이 들어가서 개선의 여지가 있는 코드 의미가 모호한 코드 이해하기 어려운 코드, 네이밍과 그 내용이 다른 코드 중복된 코드 나쁜 코드는 깨진 유리창 처럼 계속 나쁜 코드가 만들어지도록 한다. 나쁜 코드는 팀 생산성을 저하시킨다. 기술 부채를 만들어 수정을 더 어렵게 한다. 새로운 시스템을 만들어야 한다. 일정 안에 새로운 기능을 완성해야 한다.(하지만.. 나쁜 ... 한달한권book클린코드book 클린코드 핵심 정리 (6장 객체와 자료구조) 비지니스 로직 없이 순수 데이터를 저장하는 자료구조의 역할이다. 객체 위의 코드는 생성자에 비즈니스 로직과 관련된 코드가 들어가 있고, 필드를 private 으로 하여 자료를 숨겼다. 만약 Triangle 이라는 새로운 클래스(자료구조가) 추가된다면? area() 함수 안에 if-else 문을 수정해야 한다. 절차적인 코드는 새로운 자료구조를 추가하기 어렵다. 함수를 고쳐야 한다. 객체 만약... 한달한권book클린코드book 클린코드 핵심 정리 (5장 형식 맞추기) 내 for 문은 뭐지..? 이제 이해하기 좋다! 가독성에 필수적이다 코드를 수월하게 읽어나갈 수 있다. 아마추어처럼 보이지 않는다. 포맷팅으로 인해 코드를 잘못해석해 버그를 발생할 위험을 줄인다! ~200 lines < 500 lines 200라인 "코드 길이를 200줄 정도로 제한하는 것은 반드시 지킬 엄격한 규칙은 아니지만, 일반적으로 큰 파일보다는 작은 파일이 이해하기 쉽다" -> 현업... 한달한권book클린코드book 클린코드 핵심 정리 (4장 주석) 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 자신이 저지른 난장판을 주석으로 설명하지 말고 개선하는데 시간을 보내야 한다. 코드로도 의도를 표현할 수 있다! 코드의 변화에 따라가지 못하고, 주석은 방치된다. 코드는 컴파일되어 호출되지만, 주석은 그저 주석이기 때문에 그 자리에 방치되고 결국 의미없는 텍스트가 되어버린다. 구현에 대한 정보를 제공한다. 의도와 중요성을 ... 한달한권book클린코드book 1. 오브젝트와 의존관계 - DAO의 분리 1.2.1 관심사의 분리 객체지향 세계에서는 비즈니스 요구사항에 따라서 오브젝트에 대한 설계가 변할 수 있다. 즉, 오브젝트를 구현한 코드가 변할 수 있다는 것 이다. 객체지향 설계와 프로그래밍이 이전의 절차적 프로그래밍에 비해 좀 더 번거러운 작업을 요구하는 이유도 여기에 있다. 객체지향 설계의 변화에 효과적으로 대처할 수 있다는 특징 때문이다. 변화에 대응할 수 있는 가장 좋은 대책 : ... book토비의 스프링 3.1SpringSpring 클린코드 핵심 정리 (SOLID, 3장 함수) 한 클래스는 하나의 책임만 가져야 한다 OCP 의 목표는 해당 클래스의 기존 동작을 변경하지 않고 클래스의 확장하는 것을 목표로 한다. 서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다. 즉, 자식 클래스가 부모 클래스와 동일한 작업을 수행할 수 없는 경우 버그가 발생할 수 있다라는 의미 자식 클래스는 부모 클래스가 할 수 있는 모든 것을 할 수 있어야 하며 이 프로세스를 상속이라고 한... SOLID한달한권book클린코드SOLID 클린코드 핵심 정리 (7장 예외처리) 하지만 예외를 던지는 것이 명확하고, 처리 흐름이 깔끔해진다. 오류가 발생한 부분에서 예외를 던진다. (별도의 처리가 필요한 예외라면 checked exception으로 던진다.) 예외를 처리할 수 있는 곳에서 catch하여 처리한다. Exception을 상속하면 Checked Exception 명시적인 예외처리가 필요하다. C#은 확인된 예외를 지원하지 않는다. 영웅적인 시도에도 불고하고 ... 한달한권book클린코드book 1. 오브젝트와 의존관계 - DAO의 확장 이전 장에서 "객체지향 세계에서는 비즈니스 요구사항에 따라서 오브젝트에 대한 설계가 변할 수 있다." 라고 했다. 그런데 여러 오브젝트들은 서로 다른 변화의 성격을 갖고 있다. 변화의 성격이 다른 것을 분리해서, 서로 영향을 주지 않은 채로 각각 필요한 시점에 독립적으로 변경할 수 있게 하기 위해서다. 이번에는 관심사가 다르고 변화의 성격이 다른 코드를 완전히 독립적인 클래스로 만들어서 분리... book토비의 스프링 3.1SpringSpring 클린코드 핵심 정리 (8장 경계) 오픈소스, 라이브러리를 안쓰는 프로젝트는 없다. 우리가 만든 코드에 외부에서 들어온 코드를 병합해야 한다. 외부 코드는 외부에서 만든 코드인데, 외부 시스템과 호출하거나 단순히 외부에서 만들어진 코드일 수 있다. 우리 코드와 외부 코드를 깔끔하게 통합시키기 위해 경계를 잘 지어야 한다. 객체의 실제 구현을 외부로부터 감추는 방식 Sensor를 관리해야 한다. Sensor는 외부에서 사용된다.... 한달한권book클린코드book 1. 오브젝트와 의존관계 - IoC IoC는 Inversion of Conrol (제어의 역전)의 약자이다. 1.4.1 오브젝트 팩토리 현재 UserDao의 클라이언트 오브젝트인 main은 2개의 관심사를 갖고 있다. UserDao와 ConnectionMaker 구현 클래스의 오브젝트를 만드는 것 그렇게 만들어진 두 개의 오브젝트가 런타임 시점에 연결돼서 사용(테스트)되는 것 위 2개의 관심사 까지 분리해보도록 하겠다. fac... book토비의 스프링 3.1SpringSpring [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 들어가며~Ch.1 스프링뿐만 아니라 인프라/배포도 넓고 얕게 다루는게 마음에 든다. 겸사겸사 자바&스프링과도 친해지고 서버&인프라&배포에 대한 이해도 높이고 싶다. localhost:8080 뿐만 아니라, AWS로 URL 주소 할당, CI/CD 환경 갖춰볼 수 있다. 1-5장: 스프링 부트 애플리케이션 만들기 무료 버전의 경우도 자바 개발에 대한 모든 기능이 지원된다. 인텔리제이만 바로 설치하는 것도 되지만,... JavabookSpringJava 클린코드 핵심 정리 (10장 시스템) 소프트웨어 시스템은 (어플리케이션 객체를 제작하고 의존성을 서로 연결 하는) 준비 과정과 (준비 과정 이후에는 이어지는) 런타임 로직을 분리해야 한다. 객체의 생성과 객체를 사용하는 부분을 분리한다. 객체의 생성은 시작 단계에서, 비즈니스 로직은 객체를 사용하는데 집중한다. main 함수에서 시스템에 필요한 객체를 생성한 후 어플리케이션에 넘긴다. 어플리케이션은 그저 만들어진 객체를 사용한다... 한달한권book클린코드book 클린코드 핵심 정리 (10장 클래스) 클래스가 맡은 책임이 한 개인가 함수와 마찬가지로 클래스도 작아야 한다. 클래스 설명은 만일(if), 그리고(and), 하며(or), 하지만(but)을 사용하지 않고 25단어 내외로 가능해야 한다. ⇒ 책임이 한 가지여야 한다. SRP 해야 한다. 자잘한 단일 클래스가 많아지면 큰 그림을 이해하기 어렵다고 우려한다. 하지만 작은 클래스가 많은 시스템이든 큰 클래스가 몇 개뿐인 시스템이든 돌아... 한달한권book클린코드book 2. 테스트 - main (UserDaoTest) 다시보기 스프링에서의 테스트 테스트 변화한 코드에 대한 확신을 줄 수 있는 테스트 기술 1장에서 만든 UserDao가 기대했던 대로 동작하는지 확인하기 위해 간단한 테스트 코드 (main 클래스)를 만들었다. 테스트 : 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 1장에서 만들었던 main( ) 테스트 코드 이다. 이 테스트 코드 내... Spring토비의 스프링 3.1bookSpring 2. 테스트 - main (UserDaoTest) 개선 main (UserDaoTest)에는 두 가지 문제점이 있다. 수동 확인(테스트 검증) 작업의 번거로움 2.2.1 테스트 검증의 자동화 현재 테스트를 통해 검증하고 싶은 사항은 두 가지 이다. add( )에 전달한 User오브젝트의 정보가 빠짐없이 DB에 등록되었는지 add( )를 통해 DB에 등록된 User오브젝트의 정보를 DB에서 정확히 가려왔는지 get( )통해 다시 DB에서 가져온 U... Spring토비의 스프링 3.1bookSpring Mac Book에서 Java 환경 변수를 설정하는 방법 Mac 시작 로드 파일 위치(환경 변수 설정 가능) (1) 먼저 당신이 사용하는 맥 OS X가 어떤 셸인지 알고 명령을 사용해야 한다 만약 출력이: csh 또는 tcsh라면, 당신이 사용하는 것은 C Shell입니다. 만약 출력된 것이 bash,sh,zsh라면, 당신이 사용하는 것은 아마도 Bourne Shell의 변종일 것입니다. Mac OS X 10.2 이전의 기본값은 C Shell입니다... macbookjava환경 변수 클린코드 챌린지 #7 오늘 읽은 범위 오류 처리 오류가 발생하면 예외를 던지자 => 논리가 있는 호출자 코드가 오류처리 코드와 뒤섞이는 복잡한 상황을 만들지 않기 위함 Try-Catch-Finally 문부터 작성하라 - 예외가 발생할 코드를 짤 때는 try-catch-finally문으로 시작하자 - 단위 테스트 시 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하자 => try블록... bookTIL코딩노마드북클럽노개북개발자TIL [Book] TDD, 켄트 벡 2부 xUnit 예제 테스트툴(xUnit)을 테스트 주도 개발로 만들어보기 체크포인트를 만들어서 테스트하기전에는 'None' , 테스트를 마치면 '1'을 출력해주자 다음은 testMethod를 직접 호출하는 대신 진짜 인터페이스인 run()을 사용한다. WasRun은 작동했는지 여부를, TestCaseTest는 참, 거짓 여부를 알려준다. 테스트를 하다보면 발생하는 3가지 패턴 (Bill Wake의 3A) 2,3... TDDbookTDD 비전공자를 위한 이해할 수 있는 IT 지식 그동안 내가 구상한 그대로 프로그램이 동작했고, 백준이나 프로그래머스 문제를 푸는 과정이 즐거웠다. servlet이 이런 거구나... 그럼 자바스크립트이랑 서블릿과 JSP가 왜 공존하는거지? 쿠키와 세션이 이런 거구나... 그런데 서버와 클라이언트는 방금 이해했는데 다시 모르겠다... 그렇게 찾게 된 비전공자를 위한 이해할 수 있는 IT 지식은 제목부터 적절했다. 1년 전쯤인가 AWS로 떠들... book_ITbookbook