Java
-
TDD를 끊지 못하는 이유(초짧음)Java/TDD 2023. 7. 14. 23:18
탄수화물 테스트 주도 개발은 짜릿하다. 지루하고 지난한 '테스트 코드 작성'이라는 고된 시간을 잘 견뎌내고 얻게 되는 든든함은 심신에 평안을 가져다준다. 테스트 코드를 완성할 때 까진 비지니스 코드를 '잘' 작성하는 것에 신경을 쓰지 않는다. 테스트 코드가 통과되는 것에만 집중한다. 비지니스 코드가 더러워져도 문제없다. 테스트 코드가 '잘' 완성되면 더러워진 비지니스 코드를 매우 빠르게 씻겨낼 수 있으니 걱정하지 않는다. 테스트 코드를 '잘' 완성하면 그 때부터는 더러워진 비지니스 코드를 과감하게 리팩토링 한다. 리팩토링한 것들을 직접 검증할 필요는 없다. 잘 완성된 테스트 코드가 사람의 테스트와는 비교하지도 못할 빠른 속도로 코드가 잘 리팩토링 됐는지 검증해 줄 것이다. ‘리팩토링 -> 테스트 코드 실..
-
Java Stream(Lambda) 주요 메소드Java 2022. 2. 7. 00:16
회사에서 fastcampus 강의 수강을 지원해줘서 Java Stream에 관한 강의를 수강했다. stream은 지금도 자주 쓰고는 있지만 좀 더 잘 활용할 수 있는 방법을 터득하고 싶었다. 이 강의를 통해 어떤 stream에 관련된 메소드들이 있는지 알 수 있었다. 실무에서도 자주 쓸 수 있을 것 같다. Functional Programming How to do에 초점을 맞추는 명령형 프로그래밍과는 달리 선언형 프로그래밍(Functional Programming)에서는 what to do에 초점을 맞춘다. 1급 시민으로서의 함수란? 함수가 parameter, return object 등 변수처럼 사용되는 것. Functional Programming의 장점 : 높은 가독성과 확장성, 원활한 유지보수 F..
-
stackoverflow 번역하기 :: @PostConstruct를 왜 사용할까?Java 2021. 7. 25. 12:53
Link https://stackoverflow.com/questions/3406555/why-use-postconstruct Question(발번역 주의) Bean 내부의 @PostConstruct는 자바 객체의 생성자 이후에 호출되는데요, 자바 객체의 생성자 대신에 @PostConstructor를 사용해야만 하는 경우가 있나요? Answer(발번역 주의) 객체가 생성될 때 선언한 의존성들을 사용해야 하는 경우 자바 객체의 생성자는 Bean이 초기화되기 이전에 호출됩니다. 즉, 자바 객체의 생성자가 호출될 땐 의존성이 아직 주입되지 않은 상태입니다. 반면 @PostConstrucor가 적용된 메소드는 Bean의 초기화가 완료된 후 호출됩니다. 즉, @PostConstrucor가 적용된 메소드가 호출될 ..
-
객체지향 5대 원칙 :: SOLID 원칙Java/Basics 2021. 7. 18. 23:08
Single Responsiblity Principle (단일 책임 원칙) 객체는 단 하나의 책임만을 가져야 한다. Open-Closed Principle (개방-패쇄 원칙) 클래스, 함수 등의 소프트웨어의 설계 부품은 확장에는 열려있고 변경에는 닫혀있어야 한다. Liskov Substitution Principle (리스코프 치환 원칙) 하위 타입은 상위 타입으로 호환이 가능해야 한다. Interface Segregation Principle (인터페이스 분리 원칙) 인터페이스는 단 하나의 책임만을 갖도록 분리되어야 한다. Dependency Inversion Principle (의존 역전 원칙) 특정 모듈에 의존하지 말고 특정 모듈이 의존하게 하여, 소프트웨어 설계의 변경을 최소화할 수 있도록 해야 ..
-
stackoverflow 번역하기 :: static 메소드를 mocking 할 수 없는 이유Java/Basics 2021. 5. 19. 02:56
Link https://stackoverflow.com/questions/4482315/why-doesnt-mockito-mock-static-methods Question(발번역 주의) Static method는 왜 mocking 하기 어려울까? 그리고 PowerMock을 사용하면 static method를 mocking할 수 있는데, Mockito는 왜 불가능할까? Answer(발번역 주의) Mock 라이브러리는 런타임에 인터페이스를 구현하거나 해당 클래스를 상속하여 Mock 객체를 생성한다. 그런데 두 방법 모두 static method엔 작동하지 않는다. 왜냐하면 static method는 상속하거나 구현해서 사용할 수 없기 때문이다. static method를 mocking하는 유일한 방법은 런..
-
final Class는 왜 JPA Entity가 될 수 없을까?Java/Spring-JPA 2021. 1. 31. 20:19
final class는 JPA Entity Class가 될 수 없다. 왜 그럴까? JPA는 DB에서 데이터를 조회한 후 엔티티를 생성할 때 지연 로딩이라는 방식을 사용한다. 지연 로딩이란? 해당 엔티티(테이블)와 관계(join)를 맺고 있는 엔티티(테이블)들에 대한 정보는 그 즉시 로딩되지 않고 getter 메소드가 호출되는 등 실제 사용될 때 로딩된다. 이러한 방식을 지연 로딩이라 한다. 지연 로딩 방식을 이용해 데이터를 조회하기 위해서, JPA는 프록시 객체라는 것을 생성한다. 프록시 객체는 간단히 말해서 엔티티를 상속해서 확장한 클래스이다. 하지만 final class는 상속될 수 없기 때문에 JPA는 그 final class를 확장해서 프록시 객체로 사용할 수가 없다. 따라서 JPA Entity로..