전체 글88 [클린코드] 8. 동시성 동시성이란?여러 작업이 동시에 실행되는 것처럼 보이게 하는 소프트웨어적 개념 입니다.실제로는 CPU가 한 번에 하나의 작업만 처리할 수 있지만, 매우 빠르게 작업 간 전환을 수행하여 여러 작업이 겹쳐 실행되는 것처럼 느끼게 만듭니다.여러 작업을 동시에 실행하는 것이 아니라, CPU가 작업마다 시간을 분할해 적절히 Context Switching 함으로써 동시에 실행되는 것처럼 보이게 하는 것을 동시성이라고 합니다. 1. 멀티스레드와 동시성멀티스레드를 사용하는 프로그램은 대표적인 동시성 구현 방식 입니다. 하나의 프로세스 내에서 여러 스레드가 번갈아가며 실행되면서, 사용자 입장에서는 여러 작업이 동시에 진행되는 것처럼 보입니다.싱글 코어 환경에서도 동시성은 가능합니다. 이 경우 여러 스레드가 아주 짧은 시.. 2025. 5. 20. [클린코드] 7. 창발성 1. 창발적 설계로 깔끔한 코드를 구현하자.켄트 백이 제시한 단순한 설계 규칙 4가지에 대해서 알아보자. (중요도 순)모든 테스트를 실행한다.중복을 없앤다.프로그래머 의도를 표현한다.클래스와 메서드 수를 최소로 줄인다. 1) 단순한 설계 규칙 1 : 모든 테스트를 실행하라.무엇보다 설계는 의도한 대로 돌아가는 시스템을 내놓아야 한다.테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템은 "테스트가 가능한 시스템" 입니다.테스트가 가능한 시스템을 만드려고 애쓰면 설계 품질이 더불어 높아집니다.SRP를 준수하는 클래스는 테스트가 훨씬 쉽습니다. 반면 결합도가 높으면 테스트 케이스를 작성하기 어렵습니다. 그러므로 개발자는 DIP와 같은 원칙을 적용하여 의존성 주입, 인터페이스 추상화 등과 같은 도구.. 2025. 5. 20. [클린코드] 6. 시스템 "복잡성은 죽음이다. 개발로부터 생기를 앗아가며, 제품을 계획하고 기획하고 제작하고 테스트하기 어렵게 만든다."- 레이오지, 마이크로소프트 최고 기술 책임자 1. 도시를 세운다면?도시를 세운다면 혼자서는 무리이다. 각 분야를 관리하는 팀이 있기 때문에 돌아간다.또한 적절한 추상화와 모듈화 때문에 잘 돌아간다.그러나 막상 팀이 제작하는 시스템은 비슷한 수준으로 추상화를 이뤄내지 못한다.높은 추상화를 통해 시스템 수준에서도 깨끗함을 유지하는 방법을 살펴보자. 2. 시스템의 생성과 사용을 분리하라.우선 제작(Construction)은 사용(use)과 아주 다르다는 사실을 명심해야 합니다.소프트웨어 시스템은 준비과정(객체생성, 의존성 연결)과 런타임 로직을 분리해야 합니다.public Service getSe.. 2025. 5. 20. [클린코드] 5. 클래스 클래스 체계클래스를 정의하는 표준 자바 관례에 따르면 아래와 같은 순서로 변수가 나오며, 아래로 갈수록 추상화 단계가 순차적으로 내려갑니다.변수 : public static > private static > private > public함수 : public > private (자신이 호출하는 public 함수 하위에 위치시킵니다.) 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 하다는 법칙은 없습니다.때로는 변수나 유틸리티 함수를 protected로 선언해 테스트코드에 접근을 허용하기도 합니다.하지만 캡슐화를 풀어주는 결정은 언제나 최후의 수단입니다. 1. 클래스는 작아야 한다.함수는 행 수로 크기를 측정했지만, 클래스는 맡은 책임을 측정합니다.클래스 이름은 해당 클래스 책임을 .. 2025. 5. 20. [클린코드] 4. 경계 & 단위테스트 1. 경계란오픈소스, 라이브러리를 안쓰는 프로젝트는 없습니다.외부 코드를 내 코드에서 호출하는 부분을 경계라고 합니다. 단순하게 외부 코드를 사용하려는 곳에서 직접 호출할 수 있지만 보통 외부 코드를 호출하는 부분을 따로 만드는게 보편적인 방법 입니다. 2. 캡슐화(Encapsulation)객체의 실체 구현을 외부로부터 감추는 방식 1) 예제 1. 나쁜 예Map sensors = SensorFactory().get();Sensor s = sensor.get(sensorId);외부 라이브러리 SensorFactory는 Map 형태로 값을 리턴해준다고 가정해봅시다.Map에서 기본으로 제공해주는 메서드(clear, remove)로 인해 값이 조작되거나 추가될 수 있는 문제가 발생합니다. 2) 예제 2. 좋은 .. 2025. 5. 19. [클린코드] 3. 예외처리 1. 예외 처리의 좋은 예를 먼저 살펴보자.public class DeviceController { public void sendShutDown() { try { tryToShutDown(); } catch (DeviceShutDownError e) { logger.log(e); } } private void tryToShutDown() throws DeviceShutDownError { DeviceHandle handle = getHandle(DEV1); DeviceRecord record = retrieveDeviceRecord(handle); pauseDevice.. 2025. 5. 19. [클린코드] 2. 주석 & 형식 맞추기 & 객체와 자료구조 1. 주석경솔하고 근거 없는 주석은 코드를 이해하기 어렵게 만든다. 오래되고 조잡한 주석은 거짓된 잘못된 정보를 퍼뜨려 해악을 미칩니다. 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면, 주석은 거의 필요하지 않을 것 입니다. 주석은 오히려 거짓말을 한다. 시간이 지날수록 주석을 작성할 당시의 의도는 잊혀지고, 그릇될 가능성이 높다. 코드에 주석을 추가하는 이유는 코드 품질이 나쁘기 때문입니다. 모듈을 짜고 보니 짜임새가 엉망이고, 알아먹기 어렵기 때문에 주석을 쓰려고 합니다.// 직원에게 복지 혜택을 받을 자격이 있는지 검사한다.if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))if (employee.isEligibleForFullBe.. 2025. 5. 17. [클린코드] 1. 깨끗한 코드와 함수 사이드 프로젝트를 진행하면서, 내가 짠 코드를 보며 "왜 이렇게 지저분할까?"라는 생각이 들었습니다.시간이 지난 후, 다시 코드를 수정하는 과정에서 지저분한 코드로 인해 수정에 들어가는 시간이 아깝게 느껴졌습니다. 이대로는 안되겠다는 생각이 들어, 로버트 C. 마틴이 쓴 "Clean Code" 라는 책을 읽었고, 코드 품질 개선에 많은 도움을 받았습니다. 좋은 내용을 정리하면서 두고 두고 되새김질을 해놓기 위해 이 블로그를 작성합니다. 1. 나쁜 코드, 깨끗한 코드코드를 급하게 짜게되면 나쁜 코드가 늘어날 수 있습니다. 나쁜 코드가 늘어나면 결국 생산성의 하락으로 이어집니다.깨끗한 코드는 한가지에 집중합니다.깨끗한 코드는 가독성이 좋습니다. 명쾌하게 반드시 필요한 내용만 담도록 노력 해야합니다.깨끗한 코.. 2025. 5. 15. 이전 1 2 3 4 ··· 11 다음 728x90