개발 지식(66)
-
(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 -
(운영체제) API? ABI? 리눅스 시스템 프로그래밍
책을 읽다가 사람들이 별로 모를거 같은 ABI가 나와서 ABI에 대해서 문서화를 하려고 한다. 개발자라면 모두가 원하는게 있을 것이다.바로 작성한 프로그램이 잘 동작하는 것...! 어떤 환경에서도 프로그램이 잘 동작하길 원할 것이고, 이것이 시스템 프로그래밍의 영역으로 왔을 때는영향을 주는 2가지를 고려하게 된다. 바로 API와 ABI이다. 🧐What is API?API란 뭘까? API는 소프트퉤어의 소스 코드 레벨에서 서로 인터페이스 하는 방식을 정의한다. 일반적으로 API의 표준 인터페이스는 함수이며 상위 레벨의 소프트웨어에서 더 하위 레벨의 소프트웨어를 호출할 수 있다. - 리눅스 시스템 프로그래밍, 36p API는 Application Programming Interface(애플리케이..
2022.10.25 -
(Spring) DI/의존 객체 주입 패턴 + Lombok
🧐 스프링의 DI 스프링의 특징이라고 할 수 있는 DI는 Dependency Injection의 준말이다. 말 그대로 의존성 주입이며, 기본적으로 의존 객체 주입 패턴으로 이루어져 있다. 스프링에서는 bean을 직접 생성하는 것이 아닌 IoC, 즉 스프링 컨테이너가 관리하고 있다. 스프링은 가장 먼저 Controller 어노테이션을 찾고 이후 wiring 되어 있는 객체를 순차적으로 생성해서 컨테이너에 등록하는데, 이때 DI, 즉 의존관계 주입이 필요하다. 의존관계 주입에는 다음과 같은 방식이 주를 이룬다. 생성자 주입 방식 setter 주입 방식 autowired 어노테이션 주입 방식 🧐 생성자 주입 방식 public class MovieController { private final MovieServ..
2022.09.20