[Java] Collection.foreach(), Stream.foreach()를 비교해보자
·
Java/Java Concept
Foreach컬렉션이나 배열의 모든 원소를 처음부터 끝까지 차례대로 탐색하면서, 각 요소에 대해 동일한 작업을 수행하는 반복문Java8에서 추가된 Iterable 인터페이스의 기본 메서드인 forEach() 메서드를 제공하며, 해당 메서드를 통해 컬렉션을 반복하며 각 항목에 대해 반복 작업을 수행할 수 있습니다.각 요소 간 수정/삭제 작업이 필요하다면, forEach 대신 iterator()를 활용할 필요가 있습니다.향상된 for문 (enhanced for loop)이라고도 부릅니다.Collection.foreach(), Stream.foreach()대부분의 경우에는 같은 결과를 낳지만, 특정 부분에서의 차이가 존재합니다.Collection의 forEach()의 경우에는 forEach() 메서드를 제공하..
[Java] final, interface, abstract class
·
Java
Final Keyword필드, 메서드, 클래스 앞에 위치할 수 있습니다.변경이나 확장이 불가능한 성질을 가지게 됩니다.위치의미클래스변경 또는 확장이 불가능한 클래스, 상속 불가메서드오버라이딩 불가한 메서드변수값 변경이 불가능한 상수 final class Final { // 확장/상속 불가능 final int x = 1; // 변경할 수 없는 상수 final void getConstant() { // 오버라이딩 불가한 메서드 final int CONSTANT = x; // 상수 return x; }} Interface클래스가 구현해야 하는 동작을 선언하는 데 사용되는 추상 유형 (wikipedia)interface 키워드를 사용하여 정의하며, 오직 추상 메서드와 상수(sta..
[Java] Stream, Collection
·
Java
개요Java에서는 방대한 데이터를 효율적으로 다루기 위해 Collection과 Stream이라는 강력한 도구를 제공합니다. Collection은 데이터를 저장하고 관리하기 위한 자료구조의 집합이며, Stream은 이러한 데이터를 보다 선언적이고 간결하게 처리할 수 있도록 돕는 API입니다. 이 두 가지를 이해하면 반복문과 조건문에 의존하던 기존 방식에서 벗어나, 가독성과 유지보수성이 높은 코드를 작성할 수 있게 됩니다. 이해를 돕기 위해 Stream, Collection 관련 예제 코드를 작성해 보았는데, 첨부된 링크를 통해 확인하실 수 있습니다.https://github.com/daily1313/java-stream-collection GitHub - daily1313/java-stream-colle..
[Effective Java] 8장. 메소드
·
Java/Effective Java
[item-49] 매개변수가 유효한지 검사하라유효성 검사: 메서드, 생성자가 예상하는 입력 조건을 만족하는지 검증하는 과정매개변수의 유효성 검사는 메서드 몸체가 시작되기 전에 해야 하며 매개변수에 대한 제약사항은 문서화가 필요합니다.유효성 검사가 제대로 되지 않는다면, 중간에 모호한 오류가 발생할 수 있으며 행여나 수행되더라도 잘못된 결과가 반환될 수 있습니다.그래서 매개변수는 메서드 코드 시작 부분에서 검증하는 것이 좋습니다.방법@Nullable: 표준 XrequireNonNull (Java 7), checkFromIndexSize, checkFromToIndex, checkIndex (array 전용, Java 9) ExampleBigInteger mod methodpublic BigInteger m..
[Effective Java] 7장. 람다와 스트림
·
Java/Effective Java
[item-42] 익명 클래스보다는 람다를 사용하라 함수 객체자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했습니다. 이러한 인터페이스의 인스턴스를 함수 객체라고 하여 특정 함수나 동작을 나타내는 데 사용합니다.익명 클래스 (Anonymous Class)이름이 없는 클래스로, 단일 인스턴스를 생성하고 간단한 작업에 사용하기 위한 클래스[구문]인터페이스명 변수명 = new 인터페이스명() { // 인터페이스 메서드 구현 (메서드 오버라이드) // 추가적인 멤버 변수 또는 메서드도 선언 가능};JDK 1.1부터 함수 객체를 만들때 주로 사용합니다.코드가 너무 길기에 함수형 프로그래밍(Functional Programming)에 적합하지 않습니다. 익명 클래스 사용 Ex..
[Spring] csv 파일의 데이터 파싱 및 저장 성능 개선기 (JPA save() vs JdbcTemplate batchUpdate() vs MariaDB LOAD DATA INFILE)
·
Java/Spring
운영 중인 사내 시스템에서 IEEE OUI 파일(https://standards-oui.ieee.org/oui/oui.txt)을 다운로드하여 MAC 주소와 제조사 정보를 추출하고, 이를 DB에 저장해야 하는 요구사항이 있었습니다. 기존 처리 흐름 (AS-IS)oui.txt file -> oui.csv 파일 형식으로 파싱합니다.csv 파일을 BufferedReader로 읽어서 JPA save() 반복 호출로 저장합니다. 즉, 애플리케이션 런타임 시점에 csv 파일을 oui, vendor 정보로 파싱하여 일일이 save() 메서드를 호출하는 방식이었습니다. 하지만, 해당 방식은 매우 성능이 낮으며 이에 대한 첫 번째 대안으로는 saveAll() 메서드를 활용할 수 있습니다. 먼저, JPA에서 제공하는 sa..
[Effective Java] 6장. 열거 타입과 애너테이션
·
Java/Effective Java
[item-34] int 상수 대신 열거 타입을 사용하라enum type 나오기 전에는 정수 열거 패턴(int enum pattern)을 사용해 왔습니다.public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public static final int ORANGE_NEVEL = 0;public static final int ORANGE_TEMPLE = 1; 위와 같은 정수 열거 패턴은 타입 안정성을 보장하기 어렵습니다.위의 대안으로 나온 것이 열거 타입입니다. 열거 타입public enum Apple { FUJI, PIPPIN, GRANNY_SMITH}public enum Orange { NAVEL, TEM..
[Effective Java] 5장. 제네릭
·
Java/Effective Java
[item-26] 로 타입은 사용하지 말라 제네릭 타입: 클래스 혹은 인터페이스 선언에 타입 매개변수가 쓰이는 경우로 타입: 제네릭 타입에서 타입 매개변수를 사용하지 않는 것ex) List, Set ..(제네릭 타입) → List, Set제네릭 타입을 하나 정의하면 Raw Type도 함께 정의됩니다.Raw Type은 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을 때를 의미합니다.Raw Type은 타입 선언에서 제네릭 타입 정보가 전부 지워진 것처럼 동작합니다. 로 타입을 절대 쓰지 말자자바 언어 차원에서 로 타입 사용을 막지는 않았지만, 절대로 사용하지 말자로 타입을 쓰면 제네릭의 안정성과 표현력을 모두 잃게 됩니다.로 타입은 호환성 때문에 만들어졌습니다. 로 타입을 사용private final C..
[DB] Spring boot 2.x에서 기본으로 지원하는 HikariCP에 대해 알아보자
·
Java/Spring
Spring boot 2.x 버전에서는 DB Connection Pool로 HikariCP를 지원합니다. 이를 통해 매번 Connection을 생성하지 않아도 되며, Connection Pool에서 Connection을 가져와 DB 연결 및 해제를 효율적으로 할 수 있게 됩니다. 우선 HikariCP가 무엇인지 설명드리고, 연관된 개념과 Connection Pool의 동작 과정에 대해 알아보겠습니다. HikariCP (HikariCP Connection Pool)DB Connection을 관리해 주는 도구Connection Pool이 설정된 connection의 사이즈만큼 연결을 허용하여 http 요청에 대해 순차적으로 db 커넥션을 처리해 주는 기능입니다.DB Connection Pool이며, Comm..
[JMeter] Apache JMeter를 활용한 성능 테스트
·
Java/Spring
실제 서비스를 운영하다보면 기능이 잘 동작하는지도 중요하지만, 얼마나 많은 요청을 안정적으로 처리할 수 있는지에 대해서도 고려해야 합니다. 그래서 실무에서는 기능 테스트 뿐만 아니라, 성능 테스트 또한 필수적인 과정이라고 생각합니다. 이 과정에 도움이 되는 도구인 JMeter는 JSP, Ajax와 같은 동적 리소스 뿐만 아니라, JavaScript, HTML 파일과 같은 정적 리소스의 성능을 측정할 수 있고, 동시성 및 부하 테스트를 지원합니다. 더불어 테스트에 대한 결과를 Report, Table, Tree, Graph 등 다양한 형태로 추출해줍니다. 이제 장점을 알았으니, JMeter의 개념 및 관련 용어와 설치 방법(Window OS 기준으로 설명), 테스트 과정에 대해 설명드리겠습니다. JMet..