리팩터링이란 작업 전과 후가 같은 동작을 수행하도록하는 Restructuring의 특수한 하나의 형태이다. 리팩터링을 하는 이유 (소프트웨어 설계) 규칙적인 리팩터링은 코드 구조를 지탱해준다. 중복 코드가 제거되고, 코드는 항상 고유한 일을 수행함을 보장할 수 있다. (가독성) 소프트웨어를 이해하기 쉬워진다. 내 코드의 의도...
리팩터링 1장. 리팩터링 첫번째 예시
리팩터링이란? : 겉으로 드러나는 기능은 그대로 두고, 내부 구조를 개선하는 것. 공학 설계의 관점에서 설계를 한 후 기능을 만드는 것이 일반적이지만, 리팩터링의 관점에서는 기능을 만든 후, 설계를 좋은 구조로 정리해 이해하기 쉽고 변화에 유연한 좋은 코드를 만드는 작업이다. 코드 리팩터링을 위한 작업 테스트 작성: 신뢰...
환경별로 Spring 설정 구성하기 (on-profile)
개발을 진행하다가 배포 때가 되면 아래와같이 dev, prod, local 등 다양한 환경을 구성하는 배포전략이 필요할 때가 온다. 일단 환경설정 구성을 위와같이 나누려면 (application.properties에서는) #--- 를 통해 구분해주고, on-profile 로 각각 네이밍을 해줘야한다. 주의할 점은 #--- ...
자바의정석 - 14장 스트림
: 데이터 소스를 추상화하고 자주 사용되는 메서드들을 정의해 놓은 것 특징 Side effect: 기존 데이터 소스를 변경하지 않는다. 따라서 stream을 사용하면 여러 스레드가 동시접근해도 임계영역 문제를 줄일 수 있다. 일회용: 한번 사용하면 스트림이 닫혀서 재사용 불가능하다. 필요하면 스트림을 다시 생성해...
자바의정석 - 14장 람다식
: 메서드를 하나의 식(expression)으로 표현한 것. 그래서 변수처럼 사용이 가능해진다. JEDK1.8에 추가된 문법. 자바에 함수형 패러다임을 갖도록 한 문법. 자바에서는 기본적으로 메서드를 만들려면 클래스를 만들고, 객체도 생성해야하는데, 이 모든 과정을 생략 가능하게 해준다. 함수형 인터페이스 : 람다식을 변수로 받...
커밋의 상태와 .git
Commit : 커밋을 하는 것 == 파일 전체에 대한 것(스냅샷)을 저장한 것 .git/objects 에 저장된 모습을 보면 커밋들은 00, 01 .. hash값의 dir + 파일로 이루어져있다. 결국 파일 전체 하나(스냅샷)를 가리키는 것. 추후 gc로부터 하나의 델타로 변경된다. ...
자바의정석 - 12장 Generics
객체의 타입을 컴파일 시에 체크해 같은 타입이라는 것만 보장하고, 타입 안정성을 높인다. 타입 체크와 형변환을 생략가능하게 한다. e.g) List에 타입을 명시하지 않으면 다양한 타입의 객체를 한 리스트에 담을 수 있는데, 이걸 하나로 제한한다. class Box { Object item; ...
절차지향과 객체지향
: 비즈니스 로직을 처리하는 두가지 패턴 비교 (스프링 관점) view나 persistence layer를 이야기하는 것이 아니고, Domain layer를 구성하는 여러가지 방법론 중 절차지향과 객체지향에 관한 것 정답이 정해져있는 것이 아니라 상황에 맞게 트레이드 오프를 따져야 하고, 변화에 더욱 초점을 두려면 객체지향적으로 리팩...
자바의정석 - 09장 java.lang 패키지와 유용한 클래스
: 자바 프로그래밍에 가장 기본이 되는 클래스들이 모여있는 패키지. 별도로 import하지 않아도 사용 가능하다. (e.g. String, System, ..) Object : 모든 클래스의 최고 조상 클래스 equals: 주소값으로 객체 비교. Object는 최고 조상 클래스이기 때문에 다른 class를 정의할 때 equa...
객체지향 개론 2. 설계
: 객체지향적 설계란 응집도, 결합도, 캡슐화의 측면에서 변경이 쉽도록 짜는 것이다. 설계는 항상 두가지 사용자를 다 염두해야 한다. 기능을 사용하는 사람, 코드를 건드는 사람 설계의 트레이드오프 (절차지향) 심플하게 만들 것인가? (객체지향) 복잡하더라도 변경에 유연하게 만들 것인가? 객체지...