클린 코드(Clean Code)
-
8장 - OCP: 개방-폐쇄 원칙클린 코드(Clean Code)/클린 아키텍처요약 2022. 11. 24. 00:01
개방 폐쇄 원칙 개방 폐쇄 원칙이라는 용어는 버트란트 마이어가 만들었습니다. 확장에는 열려있어야 하고 변경에는 닫혀 있어야 한다라는 뜻입니다. 소프트웨어를 확장할 때 수정이 엄청나게 발생한다면 시스템을 설계한 아키텍트는 엄청난 실패를 한 것입니다. 우선 2가지의 책임이 있다면 책임을 분리하는 것에서 시작합니다. 2가지의 책임 중 하나가 변경되더라도 다른 하나의 책임에 대한 코드는 변경하지 않도록 소스 코드 의존성을 확실히 조직화해야 합니다. 이런 목적을 달성하기 위해서는 인터페이스와 구현 클래스를 활용합니다. A컴포넌트에서 발생한 변경으로부터 B 컴포넌트를 보호하려면 A 컴포넌트가 B컴포넌트에 의존해야 합니다. 따라서 가장 높은 수준의 정책을 포함하는 Interactor가 최상위에 존재하여 다른 컴포넌트..
-
7장 - SRP : 단일 책임 원칙클린 코드(Clean Code)/클린 아키텍처요약 2022. 11. 23. 00:01
단일 책임 원칙의 오해 모듈이 단 하나의 일만 해야 한다는 의미로 받아들이기 쉽습니다. 하지만 역사적으로 다음과 같은 의미를 가집니다. 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다. 변경의 이유는 사용자와 이해관계자를 가리킵니다. 사용자나 이해관계자가 여러 명일 수 있기 때문에 이런 의미보다는 변경을 요청하는 한 명 이상의 사람들을 가리키며 이러한 집단을 엑터라 합니다. 다시 말해 하나의 모듈(소스 파일)은 하나의 액터에 대해서만 책임져야 합니다. SRP 위반 예시 중복을 허용하자 Employee 클래스는 calculatePay(), reportHours(), save()를 가집니다. 세 가지 메서드는 매우 다른 세명의 액터를 책임집니다. calculatePay - 회계팀에서 기능을 정의 r..
-
4장,5장,6장클린 코드(Clean Code)/클린 아키텍처요약 2022. 11. 22. 00:01
4,5,6장에 대해서는 인상 깊은 내용에 대해서만 정리하고자 합니다. 4장 - 구조적 프로그래밍 다익스트라는 "테스트가 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수는 없다"라고 말했습니다. 다시 말해 프로그래밍이 잘못되었음은 증명할 수 있지만 프로그래밍이 맞다고 증명할 순 없습니다. 5장 - 객체지향 프로그래밍 캡슐화 데이터와 함수가 응집력있게 구성된 집단을 서로 구분 지을 수 있습니다. 하지만 기존의 C언어에 비해서 완벽한 캡슐화가 약화되었습니다. 상속 이전에도 상속을 구현할 수 있었습니다. 다만 더 편리해졌을 뿐입니다. 다형성 다형성을 이용하면 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력을 갖게 됩니다. (인터페이스를 활용한 DI) 이로 인해 저수준의 세부사항은 중요도가 낮은 플러..
-
3장 - 패러다임 개요클린 코드(Clean Code)/클린 아키텍처요약 2022. 11. 21. 00:01
구조적 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍에 대해 설명합니다. 구조적 프로그래밍 최초로 적용된 패러다임은 구조적 프로그래밍으로, 1968년 에츠허르 비버 데이크스트라가 발견했습니다. 무분별한 점프는 프로그램 구조에 해롭다는 사실을 제기하였으며 if/then/else와 do/while/until과 같이 더 익숙한 구조로 대체했습니다. 객체지향 프로그래밍 요한 달과 크리스덴 니가드에 의해 구조적 프로그래밍보다 2년 앞서 등장했습니다. 함수 호출 스택 프레임을 힙으로 옮기면 return 후에도 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견했습니다. 이런 함수자 클래스의 생성자가 되었고 지역 변수는 인스턴스 변수, 중첩 함수는 메서드가 되었습니다. 함수형 프로그래밍 최근이 들어서야 겨우 ..
-
2장 - 두 가지 가치에 대한 이야기클린 코드(Clean Code)/클린 아키텍처요약 2022. 11. 20. 00:00
모든 소프트웨어 시스템은 이해관계자에게 서로 두 가지 가치를 제공합니다. 바로 행위와 구조입니다. 개발자는 두 가지 가치를 반드시 높게 유지해야 하는 책임이 있습니다. 하지만 불행하게도 한 가지 가치에만 집중하고 나머지 가치는 배제하곤 합니다. 행위 프로그래머를 고용하는 이유는 이해관계자를 위해 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서입니다. 그리고 이해관계자의 기계가 요구사항을 만족하도록 코드를 작성합니다. 구조 소프트웨어라는 단어를 떠올리게 되면 부드러운 + 제품이라는 합성어입니다. 즉, 소프트웨어를 만든 이유는 기계의 행위를 쉽게 변경할 수 있도록 하기 위해서입니다. 만약 기계의 행위를 바꾸는 일을 어렵게 만들고자 했다면 하드웨어라고 불렸을 것입니다. 소프트웨어가 가진 본연의 목적을..
-
1장 - 설계와 아키텍처란?클린 코드(Clean Code)/클린 아키텍처요약 2022. 11. 19. 00:01
설계와 아키텍처의 정의 설계와 아키텍처 사이의 혼란을 없애고 두 용어에 대해 완전하게 정의하고자 합니다. 첫 번째로 둘 사이의 차이는 없습니다. 아키텍처는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용되는 반면 설계는 저수준의 구조 또는 결정사항 등을 의미할 때가 많습니다. 하지만 아키텍트가 실제로 하는 일을 살펴보면 이러한 구분은 무의미합니다. 집을 설계하는 아키텍트가 있고 이 집은 아키텍처를 가지고 있습니다. 집의 형태, 외관, 입체도, 공간이나 방의 배치가 여기에 포함됩니다. 하지만 도면을 살펴보면 무수히 많은 저수준의 세부사항도 확인할 수 있습니다. 콘센트, 전등, 스위치, 전등이 모두 어디에 위치하는지 도면에서 알 수 있습니다. 다시 말해 고수준의 결정사항을 지탱하는 모든 ..
-
클린 코드 - 오류 처리클린 코드(Clean Code) 2022. 2. 15. 00:01
입력이 이상하거나 디바이스가 실패할지도 모르기 때문에 오류 처리는 프로그램에 필수적인 요소입니다. 여기저기 흩어진 오류 처리 코드는 실제 코드가 하는 일을 파악하기 어렵게 만들기 때문에 오류 처리는 중요합니다. 1. 오류 코드보다는 예외를 사용하라 오류 플래그를 사용한 경우 = 예외를 사용하지 않음 if(!Error1){ doSomething1(); if(!Error2){ doSomething2(); } else { logger.log("Error2 발생"); } } else{ logger.log("Error1 발생"); } 예외를 사용하는 경우 try{ doSomething1(); } catch (Exception e){ logger.log(e); } try{ doSomething2(); } catch..
-
얼리 리턴 패턴(Early Return Pattern) 이란?클린 코드(Clean Code) 2022. 2. 6. 00:01
얼리 리턴 패턴이란? 함수나 메서드를 작성하는 패턴으로, 예상되는 긍정 결과가 함수의 끝에서 리턴되게 하고 조건이 맞지 않는 경우 나머지 코드는 반환하여 실행을 종료합니다. Ealry Return 말 그대로 리턴을 일찍하여 뒷 코드의 구조를 단순하게 만들어주는 패턴으로 else를 제거하는 것이 목적입니다. 코드를 통하여 더 알아보겠습니다. Early Return 패턴 적용 전 public String returnStuff(SomeObject argument, SomeObject argument2){ if(argument1.isValide()){ if(argument2.isValide()){ SomeObject otherVal1 = doSomeStuff(argument1, argument2) if(othe..