전체 글(410)
-
(Java8) 자바 8에서 변경된 인터페이스(1) + 이펙티브 자바
자바 8 버전이 되면서 인터페이스에서도 변경이 생겼습니다. 대표적으로 눈에 띄는 것이 기본 메서드 지원(default method)과 static 메서드 지원이 있습니다. 이번 문서에서는 기본 문서와 static 메서드를 지원함으로써 가능한 것들에 대해 알아보려고 합니다. 🧑💻상속, 구현에 용이한 기본 메서드 public interface Foo { void sayHelloTo(String name); } sayHelloTo라는 추상 메서드를 가진 Foo 인터페이스가 있습니다. 그리고 이 클래스를 여럭 곳에서 상속받아, 이를 구현하고 있다고 생각해봅시다. 그럼 자바 8이전에는 다음과 같이 사용해야 했을 것입니다. public class FooImpl implements Foo { @Override vo..
2022.11.22 -
(Java 8) 자바 8에 추가된 함수형 인터페이스(Function, Predicate 등)
Java는 각 버전마다 새로운 기능이 추가되고 있지만 가장 큰 변곡점은 Java 8 버전이라고 할 수 있습니다. Java 8버전에는 함수형 인터페이스, 람다 표현식, LocalDatetime, stream, Optional 등이 추가되면서 더욱 코드를 간결하면서 효율적이게 작성할 수 있게 되었습니다. 이 문서에서는 '함수형 인터페이스와 람다 표현식'에 대해서 알아보려고 합니다. '함수형'이 무엇인지 궁금한 분들은 아래 문서를 참고 바랍니다. (함수형 코딩) 1장/ 함수형 사고란 무엇인가? 책을 펴고 1장을 펴면 다음과 같은 챕터에 대한 설명을 볼 수 있다. 이 장에서는 함수형 사고가 무엇인지, 왜 함수형 사고가 더 좋은 소프트웨어를 만들려는 개발자에게 도움이 되는지 설명합니 mirrorofcode.tis..
2022.11.20 -
(Docker) Docker의 기본 명령어 모음(생성, 삭제..)
Docker는 이미 많은 개발자들이 사랑하는 기술이 되었다. 개인 프로젝트부터 사내에서 개발 단계의 프로젝트를 실행할 때 자주 쓰이곤 한다. 그럼에도 이 Dockerfile만 열심히 작성하거나, 한번 환경을 구축시키면 다시 볼 일이 자주 없는 탓에 기본 명령어를 자주 잊어먹곤 한다. 그래서 이렇게 블로그에 정리하려고 한다. 도커 이미지 내부 파일 구조 보기 docker run hello-world ls 이 명령어를 사용하면 도커 이미지의 파일 구조를 확인할 수 있다. 실제로 사용할 일은 별로 없겠지만, 빌드한 후 급하게 파일이 있나 없나 확인할 때 유용할 것 같다. 컨테이너 나열하기 docker ps 이 명령어는 현재 실행 중인 컨테이너를 나열한다. 컨테이너 ID, image, COMMAND, 생성시간,..
2022.11.07 -
(Spring) JPA exists를 최적화하는 여러가지 방법들
🧐들어가며 JPA는 기본적으로 많은 메서드를 지원합니다. 특히 Spring의 Spring Data JPA는 Spring Data Repo가 사용하는 여러 리포지토리 메서드를 상속받고 있기 때문에 많은 메서드를 사용할 수 있습니다. Spring Data Repo는 이렇게 기본적으로 리포지토리 리포지토리를 상속하고 있습니다. 특히 JPA는 기본 메서드뿐만 아니라 @Query 메서드를 사용해서 JPQL을 명시하여 사용할 수 있습니다. 🧐existsById JPA에서 기본으로 제공하는 existsById는 어떤 방식으로 동작할까요? Intellij에서 제공하는 JPABuddy를 사용하면 메서드의 쿼리를 추출할 수 있는 기능이 있습니다. 그러면 위와 같은 쿼리가 추출된다. 그런데 뭔가 이상합니다. 존재를 확인만 ..
2022.11.05 -
(TIL) 20221102, 테이블 연관관계의 역정규화
🏴Facts(한 것) & Findings(배운 것) 인턴을 하면서 배운 것이 몇가지 있는데, RDB상에서 연관관계가 있는 두 테이블을 반드시 매핑하지는 않는다는 것이다. 매핑을 하면 어떤 것이 가능할까? 한 쪽 테이블에서 반대쪽 테이블의 데이터를 읽을 수 있다. 그리고 생명주기를 같이하기 때문에 JPA의 orphan removal 등의 기능을 이용해서 데이터가 삭제됐을 때 다른 테이블이 데이터도 삭제 할 수 있다. 그럼 불편한 점은 무엇일까? 1. 관리해야할게 많아진다. 생명주기를 같이하는 경우가 많기 때문에 경우를 고려하며 작성한다. 2. 특정 필요한 데이터만 가져오고 싶어도, join을 하는 등 비용이 반드시 발생한다. 나는 2번째 문제에 대해서 집중했다. 책과 책에 대한 리뷰, 그리고 리뷰..
2022.11.03 -
(TIL) 20221027/ 책임에 따른 분리
🏴Facts(한 것) & Findings(배운 것) 가장 최근 TIL이 테스트하기 좋은 코드였다. 그리고 나는 책임 분리가 잘 되어 있는 코드가 테스트하기 좋은 코드라는 말을 했다. 그렇다면 어떤 코드가 책임 분리가 잘 된 코드일까? 우선 아래 코드를 보자. public class Calc { public String calc(List list) { int sum = 0; for(int i = 0; i ..
2022.10.27