본문 바로가기
반응형

Study/java8

Java, 인스턴스 메소드(instance methods)와 정적 메소드(static methods)의 차이 개요 메소드를 사용할 때 우리는 보통 두 가지 방식을 채용하여 사용한다. 인스턴스를 생성한 뒤, 그 인스턴스를 참조하여 메소드를 사용하던가 (e.g. instance.someMethod()) 혹은 클래스명으로 메소드를 참조하여 사용하던가(e.g. ClassName.someMethod()) 하여 사용한다. 이 두 방식의 메소드를 각각 인스턴스 메소드(Instance Method), 정적 메소드(Static Method)라고 하며 이 글에서는 이 두 메소드 타입에 대해 알아보고 비교해볼 것이다. Instance Method 인스턴스 메소드(Instance Method)는 소위 우리가 일반적으로 정의하고 사용하는 메소드이다. 호출하기 위해서는 반드시 해당 메소드가 정의되어 있는 클래스의 객체를 먼저 생성해주어.. 2022. 4. 1.
반복적인 DTO 변환 작업을 한 번에 정의! MapStruct 기본 정리 MapStruct 1.4.2.Final Reference Guide를 기준으로 작성되었습니다. Introduction MapStruct는 객체의 타입 변환 시에 유용하게 사용할 수 있는 라이브러리이다. 어노테이션 기반으로 작성되며 Bean으로 등록할 수 있어 여러 프레임워크의 DI를 활용하여 사용할 수도 있다. 타입 세이프하게 객체의 타입 변환 시에 데이터 매핑을 도와주는 어노테이션 프로세서 서버 어플리케이션을 개발할 때 작업하는 DTO 변환 작업은 대부분이 반복적인 작업이 대부분 도메인 객체를 풍부하게 사용하면서, 반환 데이터가 달라지게 될 경우 이를 적절하고 큰 힘을 들이지 않고 매핑할 수 있도록 도와주는 것이 바로 MapStruct 리플렉션이 아닌 직접 메소드를 호출하는 방식으로 동작하여 속도가 빠.. 2021. 3. 7.
람다 표현식(Lambda Experessions) 정리 람다 표현식(Lambda Experessions) 함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있는 자바8에서 제공하는 강력한 문법 개선 기능입니다. 람다 표현식이 있기 이전에는 하나의 함수만 사용하고 싶어도 클래스를 생성하는 코드를 짰어야 했습니다. 람다 표현식을 사용하면 일급 객체로써 다루어지는 익명 함수를 간단한 코드로 생성할 수 있습니다. 람다식이 평가(evaluation)되면 그 결과 Functional Interface의 인스턴스를 생성합니다. 람다식의 처리 결과는 표현식 몸통을 실행하는 것이 아닙니다. 대신 나중에 이 Functional Interface의 적절한 메서드가 실제 호출(invoke)될 때 표현식 몸통의 실행이 일어게 됩니다. *일급 객체란? 일급 객체(영어: firs.. 2021. 2. 8.
함수형 인터페이스(Functional Interface) 정리 함수형 인터페이스(Functional Interface) 함수형 인터페이스는 Object 클래스의 메서드를 제외하고 추상 메소드를 하나만 가지고 있는 인터페이스이다. 다른 말로 SAM(Single Abstract Method) 인터페이스라고도 한다. 함수형 인터페이스 예시 @FunctionalInterface public interface RunSomething { void doIt(); static void printName() { System.out.println("Kyeongho"); } default void printAge() { System.out.println("40"); } } @FunctionalInterface 어노테이션을 붙이면 함수형 인터페이스라 간주하고 추상 메소드가 두 개 이상되.. 2021. 2. 8.
(펌)Java8 Optional 의 ifPresent 활용 자바 8에 추가된 Optional이 제공하는 ifPresent를 사용해서 null을 확인하는 if 문을 줄일 수 있다. 1 2 3 4 5 6 7 8 Member member = memberRepository.findById(id); if (member != null) { if (member.isAdmin()) { member.addAdminPermissions(); } else { member.addDefaultPermissions(); } } Colored by Color Scripter cs 이런 코드가 있다고 가정해보자. memberRepository가 제공하는 findById를 Member 타입을 리턴하는데 이 값을 null일 수도 있기 때문에 if (member != null)과 같은 코드가 존.. 2020. 10. 4.
Java Stream(2) - 가공하기 및 결과 만들기 가공하기 전체 요소 중에서 다음과 같은 API를 이용해 내가 원하는 것만 뽑아낼 수 있다. 이러한 가공 단계를 중간 작업(intermediate operation)이라 한다. 이 작업은 스트림을 리턴하기 때문에 여러 작업을 이어 붙여(chaining) 작성할 수 있다. List names = Arrays.asList("Eric", "Elana", "Java"); 위의 예제에 적힌 List를 대상으로 예제를 살펴보자. Filtering 필터(filter)는 스트림 내 요소들을 하나씩 평가해 걸러내는 작업이다. 인자로 받는 Predicate는 Boolean을 리턴하는 함수형 인터페이스로 평가식이 들어간다. Stream filter(Predicate 2020. 7. 26.
Java Stream(1) - 기본 개념 및 생성하기 Java 8의 스트림(Stream)을 살펴본다. 스트림 Streams Java 8에서 추가한 스트림(Streams)은 람다를 활용할 수 있는 기술 중 하나이다. Java 8 이전에선 배열 혹은 컬렉션 인스턴스를 다루는 방법은 반복문(for, foreach etc..)을 활용하여 각 요소를 하나씩 꺼내서 다루는 방법(Outer Iteration; 외부 반복)이었다. 이는 간단한 로직이면 크게 문제가 되지 않으나, 로직이 복잡해지면 복잡해질수록 코드가 복잡해져 여러 로직이 섞이게 되는 경우나 중첩 되는 경우가 많았고 이를 위한 별도의 메소드를 작성해야 하는데, 이 과정은 직관적이지 않고 버그를 유발하기 쉽다. 스트림은 외부 반복을 하지 않고 각 개별 요소에 대한 처리 로직을 수행할 수 있는 여러 함수를 제공.. 2020. 7. 22.
Comparator를 이용한 Array와 List의 정렬 Java를 활용하여 Array, List에 저장된 값들을 정렬할 때 가장 많이 쓰는 방식은 Arrays 클래스에 구현돼있는 sort() 함수를 이용하는 것이다. sort 함수는 정렬 방식 중 가장 시간 복잡도가 작은 방식으로 최적화돼있기 때문에 따로 정렬 방식을 구현할 필요 없이 손쉽게 사용하면 된다. 하지만 Arrays.sort()를 사용하면 무조건 오름차순으로만 정렬하고 이차원 배열 등 다차원 배열에서는 정렬이 되지 않는다. 이런 경우에 Comparator 인터페이스를 이용하여 정렬 기준을 오버라이드할 수 있다. 이를 활용하면 Array나 List의 정렬, 다차원 배열 정렬도 손쉽게 할 수 있다. 사용법 Arrays.sort()나 Collections.sort()를 이용하여 기존의 정렬방식과 동일하게.. 2020. 7. 3.
반응형