본문 바로가기
728x90
반응형

개발자96

클린코드(Clean code) 13장 - 동시성 1. 동시성 프로그래밍 : 어플리케이션을 효율적으로 실행하기 위해 멀티코어를 온전히 활용하도록 구현하는 방식. 서버(코어)를 효율적으로 사용하여, 처리량을 최대화하기 위한 기법. 하나만 주구장창 붙들고 있는 게 아닌, 대기중에 다른일 처리하고 온다든가 하는 것도 동시성의 구현. cf)병렬성: 서버를 늘려 처리량을 늘리는 것 동시성과 병렬성은 "어플리케이션"의 관점에서 (not 클라이언트) 생각할 것. 내 어플리케이션의 효율성을 높이고, 메모리 누수나 자원 낭비 되는 일이 없도록 신경써야 함. 2. 동시성 프로그래밍의 미신과 오해 1)동시성은 항상 성능을 높여준다 (X) : 대기 시간이 길어서 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적 계산이 충분히 많은 경우에 한정.. 2022. 9. 25. 11:39
클린코드(Clean code) 12장 - 창발성 0. 창발성 : 하위 계층에는 없는 특성이나 행동이 상위 계층/전체 구조에서 자발적으로 돌연히 나타나는 현상. emergence. ex) 개미들의 상호작용 => 개미집 1. 창발적 설계 by 켄트 백 1) 모든 테스트를 실행한다. 모든 테스트를 통과하는 시스템/예측 가능한 시스템을 만들어야 설계 품질이 높아지고, 결합도를 낮추고&응집도를 높일 수 있음 테스트가 안되는 시스템은 검증이 불가능하니 출시해서는 안됨. 2) 중복을 없앤다. 기존 코드 최대한 재활용 하기 (아 찔리는 코드 하나 생각남...) *Template method 패턴 : 알고리즘의 구조를 상위 클래스 메서드에서 정의하고, 하위 클래스에서 세부 알고리즘을 정의 3) 프로그래머의 의도를 표현한다. 이름 잘 짓기 함수/클래스 사이즈를 줄이기 .. 2022. 9. 22. 22:12
클린코드(Clean code) 11장 - 시스템 1. 관심사 분리 객체를 제작하고 의존성을 연결하는 준비과정과, 그 이후에 이어지는 런타임 로직을 분리 즉, 객체 생성과 사용 부분을 분리함. 프로그래머는 로직 구현에만 집중하고, 프레임워크에 객체 생성은 맡겨버리면 됨 2. 의존성 주입(Dependency injection) 객체 의존성은 DI 컨테이너에 맡길 것. 요청이 들어오면 필요한 객체의 인스턴스를 만들고 의존성 설정 (ex. 스프링 IoC) 의존성주입 방법: setter 메소드 / 생성자 인수 등 3. 횡단 관심분리(Cross cutting concerns) 비즈니스 로직, 로깅, 트랜잭션 관리, 보안 등 다양한 관심사가 여기저기 퍼져있으나, 어플리케이션 전반이 가지는 공통의 관심사들은 분리하여 처리하는 것이 효율적. 비즈니스 로직에만 집중하기. 2022. 9. 21. 23:07
클린코드(Clean code) 10장 - 클래스 1. 캡슐화 객체의 실제 구현을 외부로부터 감추는 방식 구현은 감추되, 외부와 상호 작용하는 부분만 노출하기. private 로 제한하고 getter 를 사용하여 변수를 읽는다거나, push/pop을 사용하는것도 캡슐화의 좋은 예제 2. 단일책임 원칙 클래스는 최대한 작게. 하나의 역할만. 설명도 25단어(만일/그리고/하며/하지만 같은 접속부사 없이) 이내로 짧게 가능하게. https://career-gogimandu.tistory.com/27 객체지향 설계에서 꼭 필요한 SOLID 5대원칙(SRP/OCP/LSP/ISP/DIP) SRP : Single Responsibility Principle, 단일책임 원칙 OCP : Open Closed Principle, 개방-폐쇄 원칙 LSP : Liskov S.. 2022. 9. 19. 22:28
클린코드(Clean Code) 9장 - 단위테스트 1. 테스트 코드가 중요한 이유 : 실수를 잡아주는 역할, 실제 코드 못지 않게 중요 - 테스트케이스는 변경이 쉬워야 한다 - 테스트코드가 지저분하면 안 하느니만 못하다 - 테스트는 실사용에 적합한 설계를 유도 - 테스트는 자동화되어야 한다 : 실제로 경우의 수 나누어서 직접 테스트하기 머리 터짐. * Given(테스트 조건) - When(테스트 동작) - Then(결과 확인) 패턴 2. 테스트의 종류 - Unit test : 프로그램 내부 개별 컴포넌트 동작 테스트. 배포 전 자동 실행 - Integration test : 이바닥 말로 통테. 프로그램 내부의 개별 컴포턴트를 합쳐서, 동작을 테스트. 컴포넌트 간의 인터랙션을 확인하기 위해 필요한 과정 - E2E test : end to end test... 2022. 9. 18. 16:15
클린코드(Clean code) 8장 - 경계 타팀 소스 , 오픈 소스, 라이브러리 안 쓰는 개발은 없을 것 외부 시스템을 호출하거나, 외부에서 만들었거나 .. 우리 코드에 깔끔하게 갖다붙이려면 1. 캡슐화 실제 구현을 외부로부터 감추고 필요한 부분의 기능 / 값만 불러오기 2. adapter pattern 우리가 정한 부분만 우리가 정의한 인터페이스대로 호출하기 위해 사용하는 클래스 패턴 3. 여유가 된다면 learning test - 외부 코드를 가져올 때 테스트하고 갖다 붙이기 배울 점을 배우고 우리 코드에 가져올 때 안정성도 담보할 수 있음 2022. 9. 14. 18:11
클린코드(Clean code) 7장 - 오류 처리 1. 오류를 나타낼 때는 오류코드 냅다 던지지 말고 예외를 던지자 에러코드 ~~ 이면 ~~ 로 처리한다 전개보다는 오류가 발생한 곳에서 예외를 던진다. 별도의 처리가 따로 필요하다면 checked exception 처리하고, 그렇게 할 생각이 없다면 메서드 선언부에 throws Exception 이라도 둘러주자. (사실 try catch 제외하면 나 이거 제일 좋아함) try -> catch 를 통해 실행문을 감싸고, 예외를 처리할 수 있는 곳에서 catch 2. 특별한 경우가 아니라면, 에러클래스를 상속하여 하위클래스를 쓰잘데기 없이 또 만들지 말 것. unchecked throwable 은 RuntimeException의 하위 클래스로 만들자. 쓸데없이 throwable을 정의해서 만들 수도 있지만 .. 2022. 9. 13. 18:44
클린코드(Clean code) 6장 - 객체와 자료 구조 1. 자료구조 vs 객체 : 상황에 맞게 선택하기 절차적인 코드는 새로운 자료구조를 추가하기 어렵고 모든 함수를 다 고쳐야 한다. 자료구조를 사용하는 절차적 코드는 기본 자료구조를 변경하지 않으면서, 새로 함수를 추가하기 쉽다. 객체지향 코드는 기존 함수를 변경하지 않으면서 새로운 클래스를 추가하기 쉽다. 하지만 새로운 함수를 추가하려면, 모든 클래스를 고쳐야 한다. => 새로운 자료 타입 추가에 대한 유연성이 필요할때는 객체, 새로운 동작에 대한 유연성이 필요하면 자료구조와 절차적인 코드를 사용하자. 2. 디미터 법칙 클래스 C의 메서드 f는 이런 객체의 메서드만 호출해야 한다 -클래스 C -메서드 f 자신이 생성한 객체 -메서드 f 자신의 인수로 넘어온 객체 -클래스 C의 인스턴스 변수에 저장된 객체.. 2022. 9. 11. 12:06
클린코드(Clean code) 5장 - 형식 맞추기 1. 포맷팅의 중요성 : 가독성 가독성이 높은 글이 읽기 쉬운거랑 비슷함 들여쓰기 개판으로 꼬여있으면 읽기 넘 힘듦. 가독성 깔끔하게 작성하면 코드를 잘못 해석하여 버그를 발생할 위험도 낮출 수 있음 2. 너무 길게 작성하지 않기 를 지키기 솔직히 쉽지 않긴 한데... 연말정산이나 비례수수료 3천줄 넘어가는 코드도 천지 삐까리기는 한데.. 그래도 할 수 있으면 분리해서 짧게 짧게 끊어 가는것도 좋은 듯 파생개념의 경우 따로 소스를 분리한다든가 하는 노력을 기울여보자. 3. 밀접한 개념은 가까이에 두기 변수는 사용되는 위치에서 최대한 가까이 두기 (는 쉽지 않지만 그래도) 적절한 개행과 공백을 통해 개념을 구분하기 4. Java class declarations 1) static 변수 public > pr.. 2022. 9. 10. 21:53
728x90
반응형