자바(SE)
-
이번 포스트에서는 try~with~resource에서 resource의 close 시점에 대해 살펴보자. try~with~resource resource의 자동 close try~with~resource 문장은 AutoCloseable 한 resource를 대상으로 사용이 끝나면 자동으로 close()를 호출해주는 기능을 가지고 있다. // before try~with~resource @Override public int insert(Connection con, SsafyMember dto) throws SQLException { int result = -1; StringBuilder sql = new StringBuilder("sql 작성"); PreparedStatement pstmt = con.pr..
[java]try~with~resource의 close 호출 시점이번 포스트에서는 try~with~resource에서 resource의 close 시점에 대해 살펴보자. try~with~resource resource의 자동 close try~with~resource 문장은 AutoCloseable 한 resource를 대상으로 사용이 끝나면 자동으로 close()를 호출해주는 기능을 가지고 있다. // before try~with~resource @Override public int insert(Connection con, SsafyMember dto) throws SQLException { int result = -1; StringBuilder sql = new StringBuilder("sql 작성"); PreparedStatement pstmt = con.pr..
2024.03.14 -
이번 포스트에서는 객체지향 프로그래밍 설계의 5가지 주요 원칙인 S.O.L.I.D.에 대해 살펴보자. SRP(Single Responsibility Princlple: 단일 책임 원칙) 개요 객체의 응집도(cohesion)에 관한 내용으로 하나의 클래스는 하나의 책임만 가진다. 클래스가 제공하는 모든 기능은 그 책임을 수행하는데 집중한다. 환경이 바뀌어 완전히 새로운 기능을 가져야 한다면 그 클래스는 분할되어야 한다. 주로 클래스의 설계 즉 추상화와 연관된 개념이다. 설명 SRP는 다른 원칙들에 비해 가장 손쉽게 설명이 가능한 원칙이다. 주변에 있는 큰 패밀리 레스토랑에 가보자. 많은 직원들이 요리, 서빙, 안내, 정리 등 다양한 업무를 보고 있다. 그런데 이들은 모두 자기의 업무에 집중한다. 만약 한 ..
S.O.L.I.D.이번 포스트에서는 객체지향 프로그래밍 설계의 5가지 주요 원칙인 S.O.L.I.D.에 대해 살펴보자. SRP(Single Responsibility Princlple: 단일 책임 원칙) 개요 객체의 응집도(cohesion)에 관한 내용으로 하나의 클래스는 하나의 책임만 가진다. 클래스가 제공하는 모든 기능은 그 책임을 수행하는데 집중한다. 환경이 바뀌어 완전히 새로운 기능을 가져야 한다면 그 클래스는 분할되어야 한다. 주로 클래스의 설계 즉 추상화와 연관된 개념이다. 설명 SRP는 다른 원칙들에 비해 가장 손쉽게 설명이 가능한 원칙이다. 주변에 있는 큰 패밀리 레스토랑에 가보자. 많은 직원들이 요리, 서빙, 안내, 정리 등 다양한 업무를 보고 있다. 그런데 이들은 모두 자기의 업무에 집중한다. 만약 한 ..
2024.01.09 -
이번 포스트에서는 간만에 만나는 LTS인 JDK17버전에 대해 알아보자. 문법적 변화 Sealed Classes Sealed Class는 JDK 15버전에 소개되어 17버전에서 사용할 수 있게 되었다. 봉인된 클래스는 특정 클래스에게만 상속할 수 있게 하는 기능이다. 봉인된 class(interface)를 선언하기 위해서는 sealed 키워드를 사용하고 구현(상속)을 허락하는 클래스는 permits뒤에 나열한다. // Vehicle은 Car나 Bike만 상속받도록 허락된 봉인된 인터페이스이다. public sealed interface Vehicle permits Car, Bike { } public final class Car implements Vehicle { } // permit 되지 않은 클래스..
[JDK] 버전별 특징 - JDK17이번 포스트에서는 간만에 만나는 LTS인 JDK17버전에 대해 알아보자. 문법적 변화 Sealed Classes Sealed Class는 JDK 15버전에 소개되어 17버전에서 사용할 수 있게 되었다. 봉인된 클래스는 특정 클래스에게만 상속할 수 있게 하는 기능이다. 봉인된 class(interface)를 선언하기 위해서는 sealed 키워드를 사용하고 구현(상속)을 허락하는 클래스는 permits뒤에 나열한다. // Vehicle은 Car나 Bike만 상속받도록 허락된 봉인된 인터페이스이다. public sealed interface Vehicle permits Car, Bike { } public final class Car implements Vehicle { } // permit 되지 않은 클래스..
2023.05.23 -
이번 포스트에서는 JDK16에 추가된 기능들에 대해 살펴보자. 문법적인 변화 record 클래스 record는 JDK 14에서 처음 소개되었는데 16에서 정식으로 사용할 수 있게 되었다. record 클래스는 불변성의 데이터를 갖는 객체를 만들기 위해서 사용된다. 이전에는 이런 목적을 위해서 final 키워드를 사용했다. blank final을 초기화 하기 위해 생성자에서 초기화가 필요했고 getter가 필수적이다. public class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } public String get..
[JDK] 버전별 특징 - JDK16이번 포스트에서는 JDK16에 추가된 기능들에 대해 살펴보자. 문법적인 변화 record 클래스 record는 JDK 14에서 처음 소개되었는데 16에서 정식으로 사용할 수 있게 되었다. record 클래스는 불변성의 데이터를 갖는 객체를 만들기 위해서 사용된다. 이전에는 이런 목적을 위해서 final 키워드를 사용했다. blank final을 초기화 하기 위해 생성자에서 초기화가 필요했고 getter가 필수적이다. public class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } public String get..
2023.05.23 -
이번 포스트에서는 JDK15에서 추가된 기능들에 대해서 살펴보자. 문법적인 변화 Text Block 드디어 자바에서도 멀티라인 문자열을 만들 수 있게 되었다. """으로 문자열을 둘러쌓으면 되는데 첫 줄에는 """만 쓴다. @Test public void textBlock(){ String str = """ select * from customer where customer_id=1 """; Assertions.assertEquals(str.length(), 43); } 확정된건 이거 뿐인가? ㅜㅜ
[JDK] 버전별 특징 - JDK15이번 포스트에서는 JDK15에서 추가된 기능들에 대해서 살펴보자. 문법적인 변화 Text Block 드디어 자바에서도 멀티라인 문자열을 만들 수 있게 되었다. """으로 문자열을 둘러쌓으면 되는데 첫 줄에는 """만 쓴다. @Test public void textBlock(){ String str = """ select * from customer where customer_id=1 """; Assertions.assertEquals(str.length(), 43); } 확정된건 이거 뿐인가? ㅜㅜ
2023.05.23 -
이번 포스트에서는 JDK14의 주요 특징에 대해 살펴보자. JDK 13을 건너뛰었는데 13의 중요한 두가지 특징은 preview였고 14에서 확정되었기 때문에 여기서 다뤄볼 계획이다. 문법적인 변화 Switch Expressions JDK12에서 부터 시작한 Switch 표현식이 13을 거쳐서 14에서 확정되었다. 다음은 enum 형태의 Month를 이용해서 각 월에 해당하는 날짜 수를 반환하는 형태의 문장을 기존 switch로 작성한 예이다. 잘 동작하지만 정말 쓸데 없이 장황하다. 이 표현이 어떻게 바뀔 수 있는지 살펴보자. enum Month { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } @Test public void test() ..
[JDK] 버전별 특징 - JDK14이번 포스트에서는 JDK14의 주요 특징에 대해 살펴보자. JDK 13을 건너뛰었는데 13의 중요한 두가지 특징은 preview였고 14에서 확정되었기 때문에 여기서 다뤄볼 계획이다. 문법적인 변화 Switch Expressions JDK12에서 부터 시작한 Switch 표현식이 13을 거쳐서 14에서 확정되었다. 다음은 enum 형태의 Month를 이용해서 각 월에 해당하는 날짜 수를 반환하는 형태의 문장을 기존 switch로 작성한 예이다. 잘 동작하지만 정말 쓸데 없이 장황하다. 이 표현이 어떻게 바뀔 수 있는지 살펴보자. enum Month { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } @Test public void test() ..
2023.05.23 -
이번 포스트에서는 JDK12에서 달라진 점을 살펴보자. 이 버전도 크게 주목 받을 만한 내용은 추가되지 않았다. 추가된 API들 String 클래스 메서드 강화 indent: String 출력 시 들여쓰기를 위한 indent가 추가되었다. 초기 위치를 0이라고 했을 때 양수는 우측으로, 음수는 좌측으로 이동하는데 처음 위치보다 왼쪽으로 갈 수는 없다.(무시됨) @Test public void indentTest(){ String text = "Hello Java!\nJDK 12 is comming!"; text = text.indent(4); System.out.println(text); text = text.indent(-10); System.out.println(text); } 이때 출력된 결과는 다..
[JDK] 버전별 특징 - JDK12이번 포스트에서는 JDK12에서 달라진 점을 살펴보자. 이 버전도 크게 주목 받을 만한 내용은 추가되지 않았다. 추가된 API들 String 클래스 메서드 강화 indent: String 출력 시 들여쓰기를 위한 indent가 추가되었다. 초기 위치를 0이라고 했을 때 양수는 우측으로, 음수는 좌측으로 이동하는데 처음 위치보다 왼쪽으로 갈 수는 없다.(무시됨) @Test public void indentTest(){ String text = "Hello Java!\nJDK 12 is comming!"; text = text.indent(4); System.out.println(text); text = text.indent(-10); System.out.println(text); } 이때 출력된 결과는 다..
2023.05.22 -
JDK11은 JDK1.8 이후 등장한 첫 LTS(Long Term Support)버전이다. 프로그래밍적인 요소는 아니지만 11로 오면서 가장 큰 변화는 Oracle JDK를 상업용으로 사용할 때에는 라이센스가 필요하며 대신 OpenJDK(https://openjdk.org/projects/jdk/), Zulu(https://www.azul.com/downloads/#zulu) 등을 사용해야 한다. 기능상 차이점은 없기 때문에 그냥 무료의 JDK들을 설치해서 사용하면 된다. 개발적인 측면의 신 기능들 String 클래스에 새로운 메서드들 추가 isBlank: 문자열이 의미있는 내용으로 채워져있는지 검사하기 위해서 기존에는 isEmpty를 사용할 수 있었는데 이 녀석은 그냥 문자열의 길이가 0인지만 보는 녀..
[JDK] 버전별 특징 - JDK11JDK11은 JDK1.8 이후 등장한 첫 LTS(Long Term Support)버전이다. 프로그래밍적인 요소는 아니지만 11로 오면서 가장 큰 변화는 Oracle JDK를 상업용으로 사용할 때에는 라이센스가 필요하며 대신 OpenJDK(https://openjdk.org/projects/jdk/), Zulu(https://www.azul.com/downloads/#zulu) 등을 사용해야 한다. 기능상 차이점은 없기 때문에 그냥 무료의 JDK들을 설치해서 사용하면 된다. 개발적인 측면의 신 기능들 String 클래스에 새로운 메서드들 추가 isBlank: 문자열이 의미있는 내용으로 채워져있는지 검사하기 위해서 기존에는 isEmpty를 사용할 수 있었는데 이 녀석은 그냥 문자열의 길이가 0인지만 보는 녀..
2023.05.22