전체 글

전체 글

    클린코드 6~8장

    주제 클린코드 6장 6장 "객체와 자료 구조" 요약 객체와 자료 구조 # 메모 조회 함수와 설정 함수(get, set)로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. (좌표 클래스의 setX(), setY()로 뭔가 지정하는게 아닌 setCartesian(double x, double y)로 지정해야 함. 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 제공한다. vs 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다...

    클린코드 4~5장

    주제 클린코드 4~5장 요약 4장 "주석" 요약 잘 달린 주석 # 메모 주석 없이 이해할 수 없는 코드는 좋지 않은 코드다. 부정확한 주석은 안스니만 못함 코드에 주석을 추가한다고 코드 품질이 좋아지진 않음 표현력이 풍부하고 깔끔하고 주석이 거의 없는 코드 >>>> 복잡하고 어수선하며 주석이 많은 코드 코드만으로 의도를 설명하라 좋은 주석(정말 좋은 주석은 주석을 달지 않고 이해 가능한 것) 법적으로 넣어야 하는 주석 기본적인 정보를 제공하는 주석(정규식의 의미 설명) 의도를 설명하는 주석 (이건 이것 때문에 작성한 코드이다~... 이러한 조건이 있어 작성한 조건식이다 ... ) 의미를 명료하게 밝히는 주석(a.eqauls(b) // a == b) 결과를 경고하는 주석 여유 ( //시간이 충분하지 않으면..

    클린코드 3장

    주제 클린코드 3장 정리 3장 "함수" 요약 함수를 잘 만드는법 # 메모 어떤 프로그램이든 가장 기본적인 단위는 함수이다. ★ 함수는 무조건 작게 만들어라 if/else, whilel 문 등에 들어가는 코드는 한 줄이어야 함 인덴트는 1단 혹은 2단을 넘어가지 않는다. (중첩 구조 발생) 함수는 한 가지 기능만 수행해야 한다. 한 가지 기능은 여러 단계에 걸쳐 수행될 수 있다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 하는 것 애초에 함수를 만드는 이유는 큰 개념(함수 이름을) 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위함 함수가 한 가지만 하는지 판단하는 방법 : 단순히 다른 표현이 아니라 의미 있는 다른 함수를 추출할 수 있다면 여러 작업을 ..

    클린코드 1장 ~ 2장

    주제 클린코드 1장 ~ 2장 정리 1장 "깨끗한 코드" 요약 1. 깨끗한 코드란 무엇인가? # 메모 코드는 요구사항을 표현하는 수단 질 나쁜 코드가 누적되면 생산수단이 저하된다 요구사항의 변화와 시간의 압박으로 인한 코드 품질 저하 결국 좋은 품질의 코드를 생산하는 것은 프로그래머의 몫 빠른 시간 안에, 좋은 품질의 코드를 생산하기 위한 가장 좋은 방법은 코드를 깨끗하게 유지하는 습관이다. 나쁜 코드를 보고 나쁘다는 생각은 누구나 떠올릴 수 있지만, 개선 방안을 떠올리는 것은 코드 감각이 있는 프로그래머 깨끗한 코드는 보는 사람에게 즐거움을 선사해야 한다 오류 처리에 철저하라(메모리 누수, 경쟁 상태, 일관성 없는 명명법) 깨끗한 코드는 잘 쓴 문장처럼 읽혀야 한다 깨끗한 코드는 작성자가 아닌 사람도 읽..

    윈도우 명령 프롬프트 cmd에서 ls, clear 사용하기

    doskey ls = dir doskey clear = cls doskey 명령어를 통해 원하는 key로 매핑할 수 있다.

    [Kotlin] 코틀린 개념 정리

    주제 코틀린 기초 개념 정리 1. 코틀린에 대해 알아보기 1.1 코틀린이란? 1.1.1 코틀린이란? 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어로, 기존 Java 언어나 프레임워크와 함께 작동할 수 있다. 구글에서 지정한 안드로이드 공식 지원 언어이며, 여러 IT 대기업들이 채택한 각광받는 언어 Jetbrains에서 개발하였음 1.2 특징 1.2.1 멀티 패러다임 언어 함수형 프로그래밍과 객체 지향 프로그래밍을 모두 지원하는 멀티 패러다임 언어이다. # 함수형 프로그래밍 - 함수는 일반 값처럼 변수에 저장할 수 있고, 다른 함수의 인자로도 넘길 수 있다 - 불변 객체를 사용하여 프로그램을 작성한다. - 입력이 같으면 항상 같은 출력을 보장하고, 함수 외부의 다른 객체를 건드리지 않는다. (순수함수) ..

    Checked Exception과 Unchecked Exception 이란? 예외 처리 기법

    주제 Checked Exception과 Unchecked Exception Exception별 예외 처리 방법 1. Error 와 Exception 1.1 Error와 Exception의 차이 Error와 Exception은 문제가 생겼다는 점에서 비슷하지만 다른 클래스이다. Error란 시스템이 비정상적일 때 발생하고, 개발자가 미리 예측하거나 대처하기 어렵다 Ex) 메모리 부족(Out of Memory), 스택 오버플로우(StackOverflow) Exception이란 개발자의 실수 혹은 구현한 코드 레벨에서 발생하는 오류로 미리 예측하거나 대처할 수 있다. NullPointerException, FileNotFoundException 등등 1.2 Exception의 종류 Exception의 종류는 ..

    [JPA] 낙관적 락(Optimistic Lock), 비관적 락(Pessimistic Lock)

    주제 비관적 락과 낙관적 락에 대해 알아본다. 각각 적합한 사용처를 알아본다. 1. 비관적 락, 낙관적 락 1.1 락이 왜 필요한가요? 트래픽이 낮은 서비스에서는 자주 발생하지 않겠지만, 트래픽이 많아진다면 여러 트랜잭션/요청이 동시에 같은 데이터에 접근하는 경우가 생길 수 있다. 이때 각기 다른 요청이 수행하는 작업은 서로의 작업 결과에 영향 끼칠 수 있다. 데이터의 일관성을 유지하기 위해 Lock을 통해 이를 제어할 수 있다. 1.1 비관적 락(Pessimistic Lock) 1.1.1 정의 자원 요청에 따른 동시성 문제가 발생할 것이라 예상하고 락을 거는 방법론 트랜잭션 간에 충돌이 발생할 것이라고 가정한다. 하나의 트랜잭션이 자원에 접근했을 때 락을 걸고, 다른 트랜잭션은 접근하지 못한다. DB에..

    [InteliJ] 인텔리제이 설정 백업

    Java Code Template #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end #parse("File Header.java") /** * ${NAME} class. * * Describe here. * * * * History: * damian.lee, 0.1.0, Created at ${YEAR}.${MONTH}.${DAY} * * * @author : ${USER} * @version : 0.1.0 */ public class ${NAME} { } Live Template xptmxm @org.junit.jupiter.api.Test @org.junit.jupiter.api.DisplayName("") void ..

    Insert문 전에 발생하는 Select문을 제거해보자

    주제 JPA save 호출 시 Insert문 전에 Select문이 발생하는 이유를 알아본다. Select문을 제거하여 성능 개선을 경험한다. 1. JPA Insert 하기 전에 Select 문이 발생하는 이유 1.1 Save 메소드를 열어보자 SimpleJpaRepository를 확인하면 저장하려는 엔티티가 새로운 것인지 isNew를 통해 확인하고 저장한다. 새로운 엔티티의 경우 persist 기존에 있던 엔티티라면 merge 1.2 isNew의 기준을 재정의하자 AbstractEntityInformation.class 를 보면 isNew의 기준은 엔티티의 ID(식별자)를 보고 새로운 엔티티인지 판별하게 된다. 우리는 엔티티에 Persistable를 구현하여 이 기준을 재정의 한다. package com..