Record란?record는 Java 16에서 정식 도입된 문법으로, 데이터를 담기만 하는 불변(immutable) 객체를 단 한 줄로 만들어 주는 기능입니다.public record User(String name, int age) { }이 한 줄만 쓰면 생성자, 접근자(getter()), equals(), hashCode(), toString() 을 컴파일러가 전부 자동으로 만들어 줍니다. 예전에는 수십 줄을 직접 써야 했던 일을 자바 문법 하나로 끝내는 거죠. 그래서 DTO나 VO처럼 "값을 표현하거나, 전달하는 객체" 를 만들 때 가장 많이 쓰입니다.1. record의 등장 배경자바를 처음 배우면 이런 코드를 자주 만나게 됩니다. "이름과 나이만 담는 객체 하나" 를 만들고 싶을 뿐인데, 막상 제대..
자바[Java]
2026. 6. 4. 22:14
불변 객체(Immutable Object)란
불변 객체란?불변 객체(Immutable Object)는 생성된 이후 내부 상태(필드 값)가 절대 변하지 않는 객체입니다. 한번 만들어지면 소멸할 때까지 동일한 데이터를 유지합니다.자바의 대표적인 예가 String입니다. replace를 호출해도 원본은 그대로 두고 새 인스턴스를 반환합니다.String str = "hello";String result = str.replace("l", "L");System.out.println(str); // hello ← 원본은 그대로System.out.println(result); // heLLo ← 새 객체가 반환됨"수정"처럼 보이는 연산도 사실은 새 객체를 만드는 것입니다. Integer, Long 같은 래퍼 클래스와 LocalDate, Local..
Servlet&Jsp
2019. 7. 22. 09:48
[JSP/Servlet] JSP/Servlet 환경에서 파일 업로드 위한 Apache Commons FileUpload 라이브러리 설정 방법
연관글[서블릿/JSP] Apache Commons FileUpload를 이용한 파일업로드 구현하기파일 업로드시 라이브러리를 사용하는 이유JSP/Servlet 환경에서 파일을 업로드할때에는 오픈소스 라이브러리를 사용합니다. 왜냐하면 서버입장에서는 평소에 쿼리스트링을 통해 넘어오는 파라미터와는 다르게, 클라이언트가 HTTP 요청메시지의 몸체에 multipart 형태로 업로드한 파일의 바이너리 데이터를 입력 스트림을 통해 읽어들여 각각 잘라서 가공한 다음 사용해야 하는데, 매우 번거로운 일이기 때문입니다.물론 세밀한 조작이나 파일업로드 라이브러리를 직접 개발하기 위해서는 이러한 과정을 직접 개발해야 할 것입니다.그러나 시간이 없는 우리 일반 웹개발자들에겐 좋은 오픈소스 라이브러리들이 있습니다. 최근 버전의 S..
자바[Java]
2019. 7. 18. 20:19
[Java] Java의 문자열(String) 객체가 저장되는 String Pool에 대하여
연관글[Java] String의 불변성(Immutable)과 그 이유[용어정리] 리터럴(literal)이란? 상수와의 차이점.Java의 문자열(String) 객체가 저장되는 String Pool에 대하여Java에서 가장 많이 사용되는 데이터 타입은 String이 아닐까 싶습니다. 사람이 가장 이해하기 쉬운것이 Text이기 때문이지요. 그런데 Java에서 문자열을 표현하는 String 타입의 객체는 불변성(Immutable)이라는 성질을 가지고 있으며 같은값의 문자열에 대해서는 단 하나의 문자열 객체만을 생성하도록 설계 되어있습니다.Java에서 String이 이러한 성질을 갖는 이유는 몇가지 장점이 있기 때문인데 가장 큰 장점은 성능입니다. 같은 값을 갖는 문자열 객체는 JVM의 객체가 생성되는 공간인 H..
자바[Java]
2019. 7. 16. 11:27
[Effective Java] 인스턴스화가 필요없는 Utility 클래스 등은 private 생성자를 사용하자
인스턴스화가 필요없는 Utility 클래스 등은 private 생성자를 사용하자프로젝트를 진행할 때 어플리케이션 전역에서 사용하는 기능의 공통 메서드들은 보통 static 멤버로만 이루어진 Utility 클래스로 만들어 사용하곤 합니다. 예를 들자면 문자열을 조작할 때 사용하는 StringUtil이라거나 DateUtil 등이 있습니다.예를 들면 org.apache.commons 라이브러리에도 StringUtils가 존재합니다.public class StringUtils { public static boolean isEmpty(String str) { return str == null || str.length() == 0; } public static boolean contai..
[Effective Java] 문자열 String 영어 대소문자 무시하여 비교시에는 equalsIgnoreCase() 메서드를 사용하자뭔가 포스팅 제목만 보자면 방문자분들께서 "뭘 이미 알고 있는 당연한 이야기를 하고 있어?" 라는 말이 나올것같은 제목입니다. 이 글은 equalsIgnoreCase() 메서드를 사용하면 어떤 장점이 있는지를 정리해보고자 한 글이니 읽기에 앞서 참고 부탁드립니다.영어(알파벳)로만 이루어진 String 객체 대소문자 무시하여 비교하는 방법만약 영문자 값으로만 이루어진 두 문자열 str1과 str2가 있다고 했을때 이 둘을 대소문자를 무시하고 단순히 알파벳이 같은지만 비교하고자 한다면 어떻게 해야할까요?가장 쉬운 방법은 다음과 같이 str1과 str2를 각각 toUpperCa..
자바[Java]
2019. 7. 11. 00:30
[JAVA] Java I/O(입출력) [2] 자바 입출력 패키지(java.io) 구조
이전글[JAVA] Java I/O(입출력) [1] 입출력 및 스트림 개념입출력 패키지(java.io)자바에서 입출력과 관련된 클래스들은 java.io 패키지에 모아두었기 때문에 입출력 프로그램을 작성하기 전에는 java.io 패키지를 import 시켜주어야 합니다.import java.io.*;입출력 단위와 대상에 따른 클래스 분류java.io 패키지 안에는 사용 목적, 동작 방식에 따라 개발자가 원하는 입출력을 수행할 수 있도록 하기 위해 수많은 입출력 관련 클래스들을 모아 두었습니다. 따라서 이를 구분하기 쉽도록 클래스명(식별자)이 명명되었는데, 클래스명의 앞 뒤에 붙는 접두사와 접미사를 보면 그 입출력 클래스의 특성을 이해할 수 있습니다.가장 기본적으로 입출력 단위(크기)에 따라 분류할 수 있습니다..
자바[Java]
2019. 6. 22. 00:30
[Java] String의 더하기 연산으로 인한 문제점과 StringBuffer, StringBuilder의 특성과 차이점에 대해서
다음글[Java] String의 불변성(Immutable)과 그 이유String의 불변성으로 인한 문자열 append 연산 문제점최근에는 Java의 컴파일러의 최적화가 진행됨에 따라 문자열의 + 연산시의 문제가 많이 해결되었습니다만 과거에는 String의 불변성에 따른 문제점이 있습니다.JDBC API를 이용할때 다음과 같이 SQL을 + 연산하여 여러 문자열 리터럴을 더해 사용합니다. 여기서는 아주 간단한 sql을 작성해 보았지만 회계관련 ERP 시스템과의 연동을 하는 경우에는 쿼리는 수십 ~ 수백줄이 되기도 합니다. 조건으로 사용하는 컬럼이 늘어날수록 + 연산은 그만큼 증가합니다.String tableName = "user_tbl";String sql = "SELECT * FROM " + tableNa..
자바[Java]
2019. 6. 21. 14:58
[Java] String의 불변성(Immutable)과 그 이유
이전글[Java] String의 더하기 연산으로 인한 문제점과 StringBuffer, StringBuilder의 특성과 차이점에 대해서자바(Java) String의 불변성(Immutable)어떤 언어든 프로그래밍을 하다 보면 가장 많이 사용하고 꼭 있는 자료형이 문자열(String)일것입니다. 사람은 010100 과 같은 숫자보다 "book" 같은 문자에 더욱 익숙하기 때문입니다. 또한 문자열은 "1234"와 같이 숫자를 표현할 수 있고 "j20dsf908"와 같이 특정 인코딩된 데이터 또한 표현이 가능하며, 모든것들을 표현할 수 있습니다. 예를들어 png같은 이미지 파일도 Base64 인코딩 하여 ASCII 형식의 문자열로 표현이 가능하지요.이처럼 수많은 데이터를 문자열로 표현이 가능하기에 어떤 언어..
툴 [Tool]
2019. 5. 27. 09:00
[Maven] Apache Maven. 메이븐이란? 메이븐 다운로드 및 설치 방법
Apache Maven. 메이븐이란?Maven(메이븐)이란 Apache 재단이 개발하고 관리하는 오픈 소스 무료 빌드 도구(Tool)입니다.빌드(Build)? 빌드란?빌드라는것은 말그대로 우리가 작성한 소스코드(.java)들과 프로젝트에서 쓰인 각각의 자원들(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징(묵어주는것) 해주는 과정을 말합니다.예를 들어 JAVA웹 어플리케이션을 개발한다고 하면 개발은 이클립스등의 IDE에서 하겠지만 실제로 그 소스가 실행되는 환경은 Servlet/JSP 컨테이너인 톰캣이나 글래스피쉬 등입니다. 그러나 이런 플랫폼 환경들은 자신이 인식할 수 있는 구조가 정해져있고 그것을 규정해 놓았습니다. 예를 들어 서블릿..