전체 글
-
[스프링] 핵심 원리 이해 - 객체 지향 원리BackEnd/Spring 2022. 5. 13. 01:02
스프링 핵심 원리 - 기본편 (인프런) 강의를 듣고 느낀점을 정리한 글입니다. 스프링 원리 그리고 객체 지향의 원리 스프링 원리를 이해하기 위해서는 객체지향 원리를 잘 파악해야한다. 객체 지향의 뜻 위키백과를 참고하면. 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임의 하나이고, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임 으로 파악하고자 하는 것이다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 객체 지향 설계에 고려해야할 조건들 역할과 구현을 분리했나? 다형성을 활용하고, 인터페이스와 구현 객체를 분리했나(상속)? OCP, DIP 등과 같은 설계 원칙을 충실히 준수했나?..
-
[클린코드] 단위테스트Java/클린코드 2022. 4. 27. 00:20
제로베이스 클린코드 요약 정리 글입니다. 목차 테스트 코드의 중요성 테스트의 종류 Unit Test 작성 FIRST 원칙 1. 테스트 코드의 중요성 테스트 코드는 실수를 바로잡아준다. 테스트 코드는 반드시 존재해야하며, 실제 코드 못지 않게 중요하다. 테스트 케이스는 변경이 쉽도록한다. 코드의 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트이다. 테스트 커버리지가 높을수록 버그에 대한 공포가 줄어든다. 지저분한 테스트 코드는 테스트를 안하느니만 못하다. 테스트의 중요성 테스트는 실사용에 적합한 설계를 끌어내준다. 테스트를 작성해서 얻게 되는 가장 큰 수확은 테스트 자체가 아니다. 작성 과정에서 얻는 깨달음이다. 테스트는 자동화 되어야 한다. Build -> Test -> Provide In..
-
[클린코드] 경계Java/클린코드 2022. 3. 2. 22:22
제로베이스 클린코드 요약 정리 글입니다. 모호한 경계를 구분짓기 경계란 경계 짓기 (1) 우리 코드를 보호하기 경계 짓기 (2) 외부 코드와 호환하기 외부 라이브러리 테스트하기 - Learning Test 1. 경계란 내부 코드 |경계| 외부 코드 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. 오픈소스, 라이브러리를 안쓰는 프로젝트는 없으며 내부 코드와 외부 코드를 병합해야하는 상황이 생긴다. 우리코드(내부 코드) 와 외부 코드를 깔끔하게 병합시키려면 경계를 잘 지어야 한다. 2. 경계 짓기 (1) 우리코드 보호 하기 캡슐화 (Encapsulation) 갭슐화 : 객체의 실제 구현을 외부로부터 감추는 방식 다시 말해 Public 메소드는 외부에 공개하지만 내부 Data, 내부 메소드는..
-
[대규모 시스템] 사용자 수에 따른 규모 확장성BackEnd/대규모 시스템 설계 2022. 3. 1. 23:03
해당 장에서는 한 명의 사용자를 지원하는 시스템에서 몇백만 사용자를 지원하는 시스템까지 훑어본다. 단일 서버 단일 서버는 웹, 앱, 데이터베이스, 캐시 등이 하나의 서버에서 실행하는 경우를 말한다. 사용자 요청 처리 흐름은 다음과 같다. 사용자가 도메인 이름을 입력하여 웹사이트에 접속한다. DNS 조회 결과로 IP 주소가 반환된다. (DNS 는 외부 서비스이다) 해당 IP 주소로 HTTP(HyperText Transfer Protocol) 요청이 전달된다. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다. 단말기 요청 종류 웹 애플리케이션 : 비즈니스 로직, 데이터 저장 등을 처리하기 위한 서버, 프레젠테이션 위한 클라이언트로 구분한다. 모바일 앱 : 웹 서버와 통신 위한 HTT..
-
[클린코드] 오류 처리Java/클린코드 2022. 3. 1. 21:34
제로베이스 클린코드 요약 정리 글입니다. 예외 처리 방식 Unchecked Exception 을 사용하라 Exception 잘 쓰기 실무 예외 처리 패턴 1. 예외 처리 방식 오류 코드를 리턴하지 말고, 예외를 던져라 오류 코드 사용 예시 public class DeviceController { ... public void sendShutDown() { DeviceHandle handle = getHandle(DEV1); // 디바이스 상태를 점검한다. if (handle != DeviceHandle.INVALID) { // 레코드 필드에 디바이스 상태를 저장한다. retrieveDeviceRecord(handle); // 디바이스 일시정지 상태가 아니라면 종료한다. if (record.getStatus..
-
[클린코드] 객체와 자료구조Java/클린코드 2022. 2. 23. 00:34
01 자료구조 vs 객체 자료구조 데이터 그 자체 자료를 공개한다. 변수 사이에 조회 함수와 설정 함수로 변수를 다룬다고 객체가 되지 않는다. (getter, setter) 객체 비즈니스 로직과 관련 자료를 숨기고, 추상화한다. 자료를 다루는 함수만 공개한다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있다. 자료구조 예시 public interface Vehicle { double getFuelTankCapacityInGallons(); double getGallonsOfGasoline(); } public class Car implements Vehicle { double fuelTankCapacityInGallons; double gallonsOfGasoline; p..
-
[클린코드] 형식 맞추기Java/클린코드 2022. 2. 15. 22:54
01 포맷팅이 중요한 이유 02 클린코드 포맷팅 03 Java Class Declarations 04 Coding Convention 포맷팅이 중요한 이유 가독성에 필수적이다. 클린코드 포맷팅 적절한 길이 유지 ~ 200 lines < 500 lines 밀접한 개념은 가까이 둔다. 행 묶음은 완결된 생각 하나를 표현하기 때문에 개념은 빈 행으로 분리한다. 변수는 사용되는 위치에서 최대한 가까이 선언한다. public class BoldWidget extends ParentWidget { public static final String REGEXP = "'''.+?'''"; private static final Pattern pattern = Pattern.compile("'''(.+?)'''", Patt..
-
[클린코드] 주석Java/클린코드 2022. 2. 11. 01:26
주석을 최대한 쓰지 말자 좋은 주석 주석보다 annotation JavaDoc 주석을 최대한 쓰지 말자 주석은 나쁜 코드를 보완하지 못한다. // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if((employee.flags & HOURLY_FLAG) && employee.age > 65)) // 의미있는 이름을 지으면 해결된다. if (employee.isEligibleForFullBenefits()) 주석으로 설명하지 말고 개선하는데 시간을 보내야 한다. 코드로 의도를 표현할 수 있어야 한다. 주석은 방치된다. 코드의 변화에 따라가지 못하고, 주석은 방치된다. 코드는 컴파일되어 호출되지만, 주석은 그저 주석이기 때문에 그 자리에 방치되고 의미없는 텍스트가 되어버린다. 좋은 주석 구현에 대한 정..