같이 스터디했던 동생이 사전과제에 대한 평가에 DTO에 Lombok Setter가 무분별하게 사용을 했다는 피드백을 받았다.그러다가 좋은 DTO는 무엇일까? 라는 고민을 하다가 ... 엉뚱하게 Lombok으로 화제가 변하게 되어 정리를 해봤다. [출처 : https://kwonnam.pe.kr/wiki/java/lombok/pitfall] 개발을 하다보면 Lombok을 많이 사용하게 된다. 특히, @Data를 많이 사용하고 있다. 이 5글자만 있으면, constructor, getter, setter, toString, equals, hashcode 메소드를 자동으로 생성해주기 때문에 코드가 굉장히 간결해보이게 만들어준다. 하지만 이 간결함 뒤에는 Reflection이 존재한다.이렇게 편리한 Lombok..
천년만에 포스팅을 한다. 이직 성공해도 ... 포스팅은 놓치지 않을거에요! 라고 생각을 했는데 ..어느새 나의 소중한 블로그가 잊혀졌다. 그리고 오늘부터 다시 포스팅을 시작했다. 인수테스트에서 내가 동작하기 원하는 특정 인수테스트만을 자동으로 실행할 수 있는 프로그램을 개발이 필요했다. 요구사항은 간단하게 아래와 같다. 1. api.v1 패키지에 있는 인수테스트 중, Exhibition이라는 특정 단어가 포함된 인수테스만을 실행시킨다. 2. 새로운 인수테스트를 작성해도, 자동으로, 동적으로 테스트를 수행할 수 있는 프로그램을 개발한다. 3. 기존 테스트 코드에 대한 수정을 최소화한다. 리플랙션을 활용하면 쉽게 해결할 수 있는 문제였다. 그러나 프로그래밍 과정에서 문제가 하나 있었다. 인수테스트 실행을 위..
JDBC를 자바를 이용해서 직접 구현하는 과정에서 발생했던 작은 오류들을 정리해보려고 한다. 1. org.h2.jdbc.JdbcSQLException: Table "USERS" 현재 H2 Database를 이용해서 구현을 하고 있는데, 특정 옵션을 하지 않으면 연결이 끊어지면 데이터베이스에 작업했던 데이터가 모두 사라지게 된다.그렇기 때문에 연결이 끊어지는 순간, 테이블을 생성했던 데이터가 사라지고, 데이터를 삽입하려 했을 때 발생했다. Connection이 끊어져도 이전에작업했던 데이터들이 남아 있을 수 있도록 설정이 필요하다. 'DB_CLOSE_ON_EXIT=FALSE' 설정이 필요하다! 하지만, 나는 그 설정을 했지만, 같은 오류가 계속 발생했다. 이유는 테이블에 대한 생성 쿼리를 보관하고 있는 d..
리플랛션 Typora Tool 을 이용해서 처음으로 포스팅을 해보았다. 이전에는 단순히 Text 만으로 작성을 했는데, 작성을 하는과정에서 여러 효과를 줄 수 있어 가독성이 더 향상된 것 같다. 특히 코드를 첨부하는 부분에서 굉장히 편했다.글자 크기 지정 : [Ctrl + Shift 1 ~ 6]코드 작성 : [~~~]제목설정 : [Ctrl + Shift + Q글자 효과 : [Ctrl + B (진하게) / **] [Ctrl + I (기울기)]수평선 작성 : [---] Reflection Example - 1 Question 클래스의 모든 필드,생성자,메소드에 대한 정보 출력xxxxxxxxxx@Testpublic void showClass() { /* TODO - 1 Question 클래스의 모든 필드, 생..
오늘은 자바의 리플렉션 기능에 대해 정리해보려고 한다. 정리는 두차례로 진행이 될 예정이고, 오늘은 리플렉션에 대해서 간단히 알아보려고 한다.리플렉션은 구체적인 클래스 타입을 알지 못해도 클래스의 메소드, 타입, 변수들에 대한 정보를 접근할 수 있게 해주는 API 이다. 리플렉션을 사용하면객체를 동적으로 생성이 가능하다. 그렇다면 동적은 무엇이고? 정적은 무엇일까? 그렇다면 리플렉션이 가능한 이유를 알아보자. 그리고 리플렉션이 가능한 이유를 알아보기 전에 간단히, 컴파일이 되는 과정을 간단히 알아보려고 한다. (참고 : https://lkhlkh23.tistory.com/2) 컴파일러에 의해 '.java' 소스 파일은 '.class' 바이트 코드로 변환이 되고, 클래스 로더에 의해 Runtime Data..
1. 프로세스 : 실행중인 프로그램 프로세스는 CPU로부터 시스템 자원을 할당받아 독립적으로 실행중인 프로그램을 의미한다. 여기서 주목해야할 키워드는 시스템 자원, 독립적 실행이다.프로세스는 CPU로부터 각각 독립된 Code, Data, Stack, Heap 영역을 할당받는다. 각각의 프로세스는 독립적인 메모리 영역을 가지고 있기 때문에 다른 프로세스의 자원에 접근하기 위해서는 IPC (Inter Process Communication)를 사용해야 한다. IPC는 메일슬롯, 파이프, 파일, 소켓 등을 이용하여 통신할 수 있다. 2. 스레드 : 프로세스 내에서 실행되는 작업의 단위 프로세스 내부에는 하나 이상의 스레드가 존재한다. 그리고 각각의 스레드는 독립적으로 시스템 자원을 할당받는 프로세스와는 달리 ..
1. 람다식이란.? 최근에 함수적 프로그래밍은 병렬처리와 이벤트 지향 프로그래밍에 적합하기 때문에 객체지향 프로그래밍과 함수적 프로그래밍을 혼합함으로써 효율적인프로그래밍이 될 수 있고록 프로그램 개발 언어가 변하고 있다. 함수적 프로그래밍을 사용하지 않으면, 이벤트 핸들러를 작성할 때 익명 내부 클래스로 인해코드의 복잡성과 가독성 문제가 있었는데 이를 해결 할 수 있다. 자바는 함수적 프로그래밍을 지원하기 위해 자바 8부터 람다식을 지원하고 있다. 하지만, 개인적으로 람다식의 가장 큰 장점은 매개변수로 값 뿐만 아니라 값을 처리하는 방식도 전달할 수 있다는 것이다. 메소드에 대한 추상화가 가능해지고,이를 통해 메소드의 재사용과 확장성을 극대화할 수 있는 장점이라고 생각한다. 마지막으로, 람다식을 한줄로 ..
알고리즘 풀이현황을 보여주는 엑셀 파일을 자동으로 생성해주는 프로그램을 개발했다. 자바 코드를 컴파일해서 엑셀파일을 얻는 것이기 때문에 프로그램이라고 말하기에는 좀 그렇지만, 사용자는 오직 나 한명이기 때문에 충분하다고 생각한다. 프로그램을 개발하게된 배경은, 매일 알고리즘을 풀고 풀이현황을 수동으로 엑셀에 정보(문제번호, 문제명, URL, 완료유무, 재풀이 필요유무)를 입력하였다. 수동으로 입력하기 때문에 가끔 오타가 있었던 적도 있고, 주말에 한번에 입력한 적도 있었고, 매번 귀찮고 번거로웠다. 그래서 개발을 했다! 알고리즘을 풀때 나는 일정한 규칙을 가지고 패키지명과 파일을 구성했다. 1. 패키지명은 'Q + 문제번호' 이다. 하지만, 풀이가 완료되지 않는 문제는 'Q + 문제번호 + _Not' 으..
가끔 문제를 풀 경우, Map을 정렬하는 경우가 많다! Key에 관한 정렬은 TreeMap을 사용한다면 별도의 구현없이 정렬이 가능하다. 단, String, Integer 와 같은 기본형에만 해당된다. 만약 객체를 특정 인스턴스 변수 기준으로 정렬하고 싶다면, Comparable 을 이용한 정렬이 필요하다. 해당 객체를 생성하는 클래스에서 Comparable 인터페이스를 implements 하거나, 혹은 아래와 같은 방식으로 익명객체, 람다식을 활용할 수 있다. 하지만, 이번 예제에서는 Map의 Value에 대한 정렬을 해볼려고 한다. 정렬하는 방법을 익명객체와 람다식을 활용해서 구현했다. package test; import java.util.*; public class ValueSortExample ..