클린코드 클린코드 7장 - 오류 처리 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 이 말은 지저분한 오류 처리 코드 때문에 실제 코드가 무엇을 하는지 파악하기 어려워지기 때문이다. 위와 같이 오류 코드를 사용하면 호출자의 코드가 복잡해진다. try 블록에서 무슨일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 그러므로 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하는 ... 클린코드cleancodecleancode [클린코드] 6장 객체와 자료구조 화요일 금요일까지 각각 두장씩 읽고 각자 한 장씩 발표하기 화요일 : 진형 홀수 장, 시준 짝수 장 금요일 : 시준 홀수 장, 진형 짝수 장 변수를 private으로 선언하더라도 게터세터를 이용하면 구현을 노출한다. 위 인터페이스는 직교 좌표계인지 극좌표계인지 알 수 없다. 메서드가 접근 정책을 강제하고 좌표를 읽을 때는 개별적으로 읽어야 하며 설정할 때는 두 값을 한번에 설정해야 한다. 추... 클린코드클린코드 NEXTSTEP CleanCode JS Mission3 - 자동차 경주 회고 자동차에 이름을 부여할 수 있다. 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. 처음에는 자동차의 이름 길이 유효여부를 검증할때 이름이 들어간 배열을 순회한후 각 요소의 length가 5자 이하인지 true/false를 return하려 했는데, 뭔가 좀 더 좋은 방법이 있지 않나 고민하다가 예~전에 코드리뷰 스터디에서 받았던 피드백 내용인 용도에 맞는 배열 메서드를 사용하기가... cypress테스트코드JavaScript도메인클린코드JavaScript [클린코드] 5장 형식 맞추기 화요일 : 진형 홀수 장, 시준 짝수 장 금요일 : 시준 홀수 장, 진형 짝수 장 코드의 형식은 중요하다! 코드의 형식은 의사소통의 일환이다. 파일마다 200줄 정도로도 커다란 시스템을 구축할 수 있다. 개념은 빈 행으로 분리하라. 생각 사이에 빈 행을 넣어 분리해야 마땅하다. 세로 밀집도 밀접한 코드 행은 세로로 가까이 놓여야 한다. 서로 밀접한 개념은 세로로 가까이 둬야 한다. 변수는 사... 클린코드클린코드 클린코드 14장 책 초반에, 좋은 코드를 짜기 위해서는 일단 막 짜고 나서 다듬어야 한다고 했다.. 초안 코드를 단계적으로 개선에 좋은 코드를 만들어야 한다. 이 장에서 분석할 예제는 위 코드를 기반으로 한다. 유틸리티 Args 프로그램을 짜다 보면 종종 명령행 인수의 구문을 분석할 필요가 생긴다. Args 구현 책에 있는 코드는 이렇게 생겼다. 상당히 깔끔하다. 하지만 처음부터 이런 코드를 짤 수 는 없다... 클린코드독서독서 클린코드 핵심 정리 (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 클린코드 핵심 정리 (7장 예외처리) 하지만 예외를 던지는 것이 명확하고, 처리 흐름이 깔끔해진다. 오류가 발생한 부분에서 예외를 던진다. (별도의 처리가 필요한 예외라면 checked exception으로 던진다.) 예외를 처리할 수 있는 곳에서 catch하여 처리한다. Exception을 상속하면 Checked Exception 명시적인 예외처리가 필요하다. C#은 확인된 예외를 지원하지 않는다. 영웅적인 시도에도 불고하고 ... 한달한권book클린코드book 클린코드 3장 의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있을까? 한 가지만 해라 함수는 한 가지만 해야 한다. 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 한다고 봐도 된다. 함수 당 추상화 수준은 하나로 추상화 수준이 높은 함수랑 추상화 수준이 낮은 함수랑 막 섞어쓰지 말자. ... 클린코드독서독서 클린코드 핵심 정리 (8장 경계) 오픈소스, 라이브러리를 안쓰는 프로젝트는 없다. 우리가 만든 코드에 외부에서 들어온 코드를 병합해야 한다. 외부 코드는 외부에서 만든 코드인데, 외부 시스템과 호출하거나 단순히 외부에서 만들어진 코드일 수 있다. 우리 코드와 외부 코드를 깔끔하게 통합시키기 위해 경계를 잘 지어야 한다. 객체의 실제 구현을 외부로부터 감추는 방식 Sensor를 관리해야 한다. Sensor는 외부에서 사용된다.... 한달한권book클린코드book Clean Code With Kotlin 1 하지만 어떻게 클린 코드를 적을까? 여기 적용 시킬 몇 개의 규칙이 있다. 우리가 패키지, 클래스, 함수, 변수들을 만들 때 코드를 작성한다. 그리고 그들은 이름들을 갖고 있고 우리는 이 컴포넌트의 의도를 표현하는 이름을 골라야 한다. 우리가 가독성 있는 코드를 짜려고 찾아보면 3개의 질문을 하라고 한다. 2) "if-null" checks를 피하고 evils(?:)와 throw를 같이 사용... 클린코드코틀린kotlinkotlin 클린코드 4~6장 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 좋은 주석 하지만 정말 좋은 주석은 주석을 달지 않을 방법을 찾아낸 주석이라는 사실을 명심하자. 하지만 가능하다면 함수 이름에 정보를 담는 편이 더 좋다. 모든 함수에 Javadocs를 달거나 모든 변수에 주석을 달아야 하는 규칙은 코드를 복잡하게 만들며, 잘못된 정보를 제공할 여지를 만든다. 이런 정보는 소스 코드 관리 ... 클린코드클린코드 클린코드 6장 아무 생각 없이 get(), set() 함수를 난사한다고 변수와 구현을 숨길 수 있는 게 아니다. 자료/객체 비대칭 면접 대비를 하면서 절차 지향 프로그래밍 vs 객체 지향 프로그래밍 이라는 질문을 본 적이 있다. (자료구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 ... 독서클린코드독서 클린 코드 (Clean Code) - 5 : Concurrency 무엇과 언제를 분리하게 되면 곧 동시성을 구현할 수 있음을 의미하게 되는데, 어플리케이션의 구조와 효율이 좋아지고 시스템을 이해하기 수월하다는 장점을 가지고 있다. 동시성은 부하를 유발시킬 수 있다. 다양한 스레드가 Counter 클래스를 공유하고 있는 상태에서, getIncreasedCount() 를 호출한다고 가정했을 때 다음과 같은 결과를 받을 수 있다. 잘못된 결과를 낳을 수 있는 가... CLEAN CODE클린코드동시성CLEAN CODE 클린코드 6장. 객체와 자료구조 어떤 패러다임이나 방식으로도 유연한 설계를 구현할 수 있다면 최선의 해결책을 선택해라 라는걸 전반적인 주제 6-1 에서는 확실히 직교 좌표계를 사용함을 알 수 있다 캡슐화를 할때에도 단순히 특정 클래스에 종속되는 변수이름을 넣어서 함수로 만들지 말고, 약간의 모호함, 추상적인 개념을 넣어서 어떤 클래스에도 적용할 수 있게끔 설계하라 라는 인상을 받음. 자료 객체 / 비대칭 그리고 위 코드가 ... 클린코드클린코드 클린코드 1~3장 체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다. 변수나 함수, 클래스 이름은 다음과 같은 질문에 모두 답해야 한다. 변수, 함수, 클래스 이름이나 타입을 바꾸기 어렵고 읽기도 어려워지기 때문 인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을 택하자. 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한... 클린코드클린코드 클린코드 3장 함수 → 바깥을 감싸는 함수(enclosing function)이 작아지고 블록 안에서 호출하는 함수 이름을 적절히 짓는 다면 코드를 이해하기 쉬워짐. 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는... 클린코드스터디스터디
클린코드 7장 - 오류 처리 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 이 말은 지저분한 오류 처리 코드 때문에 실제 코드가 무엇을 하는지 파악하기 어려워지기 때문이다. 위와 같이 오류 코드를 사용하면 호출자의 코드가 복잡해진다. try 블록에서 무슨일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. 그러므로 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하는 ... 클린코드cleancodecleancode [클린코드] 6장 객체와 자료구조 화요일 금요일까지 각각 두장씩 읽고 각자 한 장씩 발표하기 화요일 : 진형 홀수 장, 시준 짝수 장 금요일 : 시준 홀수 장, 진형 짝수 장 변수를 private으로 선언하더라도 게터세터를 이용하면 구현을 노출한다. 위 인터페이스는 직교 좌표계인지 극좌표계인지 알 수 없다. 메서드가 접근 정책을 강제하고 좌표를 읽을 때는 개별적으로 읽어야 하며 설정할 때는 두 값을 한번에 설정해야 한다. 추... 클린코드클린코드 NEXTSTEP CleanCode JS Mission3 - 자동차 경주 회고 자동차에 이름을 부여할 수 있다. 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. 처음에는 자동차의 이름 길이 유효여부를 검증할때 이름이 들어간 배열을 순회한후 각 요소의 length가 5자 이하인지 true/false를 return하려 했는데, 뭔가 좀 더 좋은 방법이 있지 않나 고민하다가 예~전에 코드리뷰 스터디에서 받았던 피드백 내용인 용도에 맞는 배열 메서드를 사용하기가... cypress테스트코드JavaScript도메인클린코드JavaScript [클린코드] 5장 형식 맞추기 화요일 : 진형 홀수 장, 시준 짝수 장 금요일 : 시준 홀수 장, 진형 짝수 장 코드의 형식은 중요하다! 코드의 형식은 의사소통의 일환이다. 파일마다 200줄 정도로도 커다란 시스템을 구축할 수 있다. 개념은 빈 행으로 분리하라. 생각 사이에 빈 행을 넣어 분리해야 마땅하다. 세로 밀집도 밀접한 코드 행은 세로로 가까이 놓여야 한다. 서로 밀접한 개념은 세로로 가까이 둬야 한다. 변수는 사... 클린코드클린코드 클린코드 14장 책 초반에, 좋은 코드를 짜기 위해서는 일단 막 짜고 나서 다듬어야 한다고 했다.. 초안 코드를 단계적으로 개선에 좋은 코드를 만들어야 한다. 이 장에서 분석할 예제는 위 코드를 기반으로 한다. 유틸리티 Args 프로그램을 짜다 보면 종종 명령행 인수의 구문을 분석할 필요가 생긴다. Args 구현 책에 있는 코드는 이렇게 생겼다. 상당히 깔끔하다. 하지만 처음부터 이런 코드를 짤 수 는 없다... 클린코드독서독서 클린코드 핵심 정리 (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 클린코드 핵심 정리 (7장 예외처리) 하지만 예외를 던지는 것이 명확하고, 처리 흐름이 깔끔해진다. 오류가 발생한 부분에서 예외를 던진다. (별도의 처리가 필요한 예외라면 checked exception으로 던진다.) 예외를 처리할 수 있는 곳에서 catch하여 처리한다. Exception을 상속하면 Checked Exception 명시적인 예외처리가 필요하다. C#은 확인된 예외를 지원하지 않는다. 영웅적인 시도에도 불고하고 ... 한달한권book클린코드book 클린코드 3장 의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있을까? 한 가지만 해라 함수는 한 가지만 해야 한다. 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 한다고 봐도 된다. 함수 당 추상화 수준은 하나로 추상화 수준이 높은 함수랑 추상화 수준이 낮은 함수랑 막 섞어쓰지 말자. ... 클린코드독서독서 클린코드 핵심 정리 (8장 경계) 오픈소스, 라이브러리를 안쓰는 프로젝트는 없다. 우리가 만든 코드에 외부에서 들어온 코드를 병합해야 한다. 외부 코드는 외부에서 만든 코드인데, 외부 시스템과 호출하거나 단순히 외부에서 만들어진 코드일 수 있다. 우리 코드와 외부 코드를 깔끔하게 통합시키기 위해 경계를 잘 지어야 한다. 객체의 실제 구현을 외부로부터 감추는 방식 Sensor를 관리해야 한다. Sensor는 외부에서 사용된다.... 한달한권book클린코드book Clean Code With Kotlin 1 하지만 어떻게 클린 코드를 적을까? 여기 적용 시킬 몇 개의 규칙이 있다. 우리가 패키지, 클래스, 함수, 변수들을 만들 때 코드를 작성한다. 그리고 그들은 이름들을 갖고 있고 우리는 이 컴포넌트의 의도를 표현하는 이름을 골라야 한다. 우리가 가독성 있는 코드를 짜려고 찾아보면 3개의 질문을 하라고 한다. 2) "if-null" checks를 피하고 evils(?:)와 throw를 같이 사용... 클린코드코틀린kotlinkotlin 클린코드 4~6장 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 좋은 주석 하지만 정말 좋은 주석은 주석을 달지 않을 방법을 찾아낸 주석이라는 사실을 명심하자. 하지만 가능하다면 함수 이름에 정보를 담는 편이 더 좋다. 모든 함수에 Javadocs를 달거나 모든 변수에 주석을 달아야 하는 규칙은 코드를 복잡하게 만들며, 잘못된 정보를 제공할 여지를 만든다. 이런 정보는 소스 코드 관리 ... 클린코드클린코드 클린코드 6장 아무 생각 없이 get(), set() 함수를 난사한다고 변수와 구현을 숨길 수 있는 게 아니다. 자료/객체 비대칭 면접 대비를 하면서 절차 지향 프로그래밍 vs 객체 지향 프로그래밍 이라는 질문을 본 적이 있다. (자료구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 ... 독서클린코드독서 클린 코드 (Clean Code) - 5 : Concurrency 무엇과 언제를 분리하게 되면 곧 동시성을 구현할 수 있음을 의미하게 되는데, 어플리케이션의 구조와 효율이 좋아지고 시스템을 이해하기 수월하다는 장점을 가지고 있다. 동시성은 부하를 유발시킬 수 있다. 다양한 스레드가 Counter 클래스를 공유하고 있는 상태에서, getIncreasedCount() 를 호출한다고 가정했을 때 다음과 같은 결과를 받을 수 있다. 잘못된 결과를 낳을 수 있는 가... CLEAN CODE클린코드동시성CLEAN CODE 클린코드 6장. 객체와 자료구조 어떤 패러다임이나 방식으로도 유연한 설계를 구현할 수 있다면 최선의 해결책을 선택해라 라는걸 전반적인 주제 6-1 에서는 확실히 직교 좌표계를 사용함을 알 수 있다 캡슐화를 할때에도 단순히 특정 클래스에 종속되는 변수이름을 넣어서 함수로 만들지 말고, 약간의 모호함, 추상적인 개념을 넣어서 어떤 클래스에도 적용할 수 있게끔 설계하라 라는 인상을 받음. 자료 객체 / 비대칭 그리고 위 코드가 ... 클린코드클린코드 클린코드 1~3장 체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다. 변수나 함수, 클래스 이름은 다음과 같은 질문에 모두 답해야 한다. 변수, 함수, 클래스 이름이나 타입을 바꾸기 어렵고 읽기도 어려워지기 때문 인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을 택하자. 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한... 클린코드클린코드 클린코드 3장 함수 → 바깥을 감싸는 함수(enclosing function)이 작아지고 블록 안에서 호출하는 함수 이름을 적절히 짓는 다면 코드를 이해하기 쉬워짐. 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는... 클린코드스터디스터디