전체 글 23

[Clean Code] 8장, 경계

외부 코드 사용하기 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓴다. 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. java.util.Map Map은 다양한 인터페이스로 수많은 기능 제공. Map이 제공하는 기능성과 유연성은 유용하지만 그만큼 위험이 크다. 문제 1 : Map 사용자라면 누구나 Map 내용을 지울 권한이 있다 - clear() 문제 2 : Map은 객체 유형을 제한하지 않기에 사용자는 어떤 객체 유형도 추가할 수 있다. 개선이 필요한 예시 (문제 1, 문제 2 존재) Map이 반환하는 Objet를 올바른 유형으로 변환할 책임은 Map을 사용하는 클라이언트에 있다. clear() 함수를 이용해서 누구나 Map의 내용을 지울 수 있다. Map sensors = new..

book/Clean Code 2022.09.01

[Clean Code] 7장, 오류 코드

오류 처리는 중요하다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. 여기서 좌우된다는 표현은 코드 기반이 오류만 처리한다는 의미가 아니다. 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 파악하기가 거의 불가능하다는 의미이다. 오류 코드보다 예외를 사용하라 오류 플래그 설정, 혹은 호출자에게 오류 코드를 반환하는 방법 함수를 호출한 즉시 오류를 확인해야 함 → 호출자 코드가 복잡해짐. public class DeviceController { ... DeviceHandle handle = getHandle(DEV1); if (handle != DeviceHandle.INVALID) { retrieveDeviceRecord(handle); if (record.getStatus() ..

book/Clean Code 2022.08.31

[Clean Code] 6장, 객체와 자료구조

자료 추상화 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개하는 편이 좋다. 아무 생각 없이 get/set 함수를 추가하는 방법이 가장 나쁘다. 구체적인 Point 클래스 (구현을 외부로 노출) → 나쁜 케이스 내부 구조를 노출 (변수를 private로 설정하더라도 get,set 함수 제공시 구조가 외부로 노출) 개별적으로 좌표값을 읽고 설정하게 강제. public class Point { private double x; private double y; } 추상적인 Point 클래스 (구현을 완전히 숨김) → 좋은 케이스 클래스 메서드가 접근 정책을 강제. 좌표를 읽을 때는 각 값을 개별적으로 읽도록 강제 좌..

book/Clean Code 2022.08.30

[Clean Code] 5장, 형식 맞추기

형식을 맞추는 목적 코드 형식은 의사소통의 일환. 전문 개발자의 일차적인 의무 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다. 하지만 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 적절한 행 길이를 유지하라 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 소스 파일의 이름은 간단하면서도 설명이 가능하게 짓는다. 파일의 첫 부분은 고차원 개념과 알고리즘을 설명한다. 파일의 아래로 내려갈수록 의도를 세세하게 묘사한다. 파일의 마지막에는 가장 저차원 함수와 세부 내역이 나온다. 개념은 빈 행으로 분리하라 코드의 각 행은 수식이나 절을 나타내고, 일련의 행 묶음은 완결된 생각 하나를 표현한다. 생각 사이에는 빈 행을 넣어 분리한다. // 패키..

book/Clean Code 2022.08.29

[Clean Code] 4장, 주석

좋은 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문. 주석으로 코드의 의미를 표현하기보다는 코드를 리팩터링 하자. 코드로 의도를 표현하라 코드를 깔끔하고 짜임새 있게 작성해서 주석을 달지 않는 것이 좋음. // 1. 개선 전 코드 + 주석 추가 // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (emplyee.age > 65)) // 2. 개선 후 코드 + 주석 삭제 if (employee.isEligibleForFullBenefits()) 좋은 주석 법적인 주석 회사가 정립한 구현 표준에 맞춰 법적인 이유로 추가하는 특정 주석 (ex : 저작권, 소유권) // Copyrigh..

book/Clean Code 2022.08.28

[정리본] 데이터통신공학

학교 강의 수강하면서 만들었던 전공 서적 정리본. 공부하다 설렐수도 있구나 싶었던 기억.. 학교 다니면서 들은 수업중에 가장 재밌었다 생각보다 공부량이 많았다. 정리본 글씨체 크기 8로 하고, 페이지 반반 나눴는데도 정리본이 20장이 나왔다 교재도 4판, 5판 연습문제가 달라서 둘 다 풀고 정리하느라 시간 엄청 쏟았다... 그래도 과목이 재밌어서 다 좋았던 기억 정리본 서적 Behrous Forouzan, "Data Communications And Networking 5th Edition", McGraw-Hill College

공부/학교 2022.08.28

[TIL] 220826-220828

26일 💡 학습 내용 클린 코드 2장 (의미 있는 이름) 요약정리 디자인 패턴 (Strategy, Facade) 개념 공부, 간단한 코드 구현 객체지향 개념 복습, SOLID 추가 정보 노션 정리본에 작성 27일 💡 학습 내용 클린코드 3장 (함수) 요약정리 로그 기본 개념 정리 (logging 개념, SLF4J) Logback 환경 설정 + 간단한 실습 예외처리, 브라우저의 통신 방법 복습, 노션 정리본 블로그에 업로드. 🔎 개선할 점 기초 개념에 충실하기 모르는 개념들, 새로운 기술들을 익혀야겠다는 생각에 가장 기본이 되는 부분들을 놓치고 있었다. CS 지식들(객체지향, OS, 네트워크 등), Spring의 기본 작동 방식, 깨끗하게 코드 작성하는 방법 위주로 다시 천천히 공부. 꾸준히 복습하기 매일..

TIL 2022.08.27

로그 관리 (Logging)

Logging 프로그램 개발 중이나 완료 후 발생할 수 있는 오류에 대해 디버깅하거나, 운영중인 프로그램 상태를 모니터링하기 위해 필요한 정보(로그)를 기록하는 것. Logging vs System.out.println() 출력 형식을 지정할 수 있다. 로그 레벨에 따라 남기고 싶은 로그를 별도로 지정할 수 있다. 콘솔 뿐만 아니라 파일이나, 네트워크 등 로그를 별도의 위치에 남길 수 있다. Logging vs Debugging 프로그램의 절반은 디버깅. 디버깅을 할 수 없는 상황에서 로깅이 최선의 선택. (ex : 실서버 구동중) 디버깅을 쓸 수 있다면 디버깅을 최대한 활용 Java의 주요 Logging Framework native java.util.logging Log4J : 몇 년 전까지 사실상 ..

공부 2022.08.27

웹 브라우저에서의 통신 방법 (Polling, Long Polling, Streaming, Socket)

웹 브라우저에서의 통신 Polling Client가 평범한 HTTP Request를 Server로 계속 보내서 이벤트 내용을 전달받는 방식. 장점 일정하게 갱신되는 서버 데이터의 경우 유용하게 사용될 수 있는 방식. 단점 Client가 많아지면 Server의 부담이 급증. Client 측에서 실시간 정도의 빠른 응답을 기대하기 어려움. HTTP 오버헤드 (전송하는 데이터 양에 비해 header의 양이 큰 문제) 발생. Long Polling Server 측에서 접속을 열어두는 시간을 길게 하는 방식. Client가 서버로 HTTP Request를 보내면, 서버는 응답에 대한 사용 가능한 데이터가 없다면 계속 대기. 그러다 서버에서 해당 클라이언트로 전달할 이벤트가 있다면 그 순간 response 메시지를..

공부 2022.08.27

[Clean Code] 3장, 함수

작게 만들어라 함수를 작게 만들수록 각 함수들의 의도가 명확해짐 블록과 들여쓰기 if문/else문/while문 등에 들어가는 블록은 한 줄이어야 한다. 들여쓰기의 수준은 1단이나 2단을 넘어서는 안된다. 한 가지만 해라 함수는 한 가지만 처리해야 한다. 함수가 한 가지만 하는지 판단하는 방법 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러가지 작업을 하는 것. 아래 함수는 지정된 함수 이름 안에서 추상화 수준이 하나다. 따라서 한 가지 역할만 수행. public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSUite) thorows Exception { if (isTestPage(pageData..

book/Clean Code 2022.08.27