[JAVA] Junit5
·
JAVA
JUnit5 2017년 10월에 공개됨 스프링부트 2.2부터 Junit5가 기본버전이 됨 JUnit5 구조 Platform : 테스트를 실행해주는 런처를 제공 / TestEngine API 제공 Jupiter : TestEngine API 구현체로 JUnit 5를 제공 Vintage: Junit4와 3을 지원하는 TestEngine 구현체 JUnit5 기본 어노테이션 어노테이션 기능 @Test 테스트 메소드 설정 @BeforeAll 현재 클래스 테스트 실행전 해당 테스트 실행 @BeforeEach 모든 테스트 실행전에 실행할 메소드 정의 @AfterAll 현재 클래스 테스트 종료후 해당 테스트 실행 @AfterEach 모든 테스트 실행후에 실행할 메소드 정의 @Disabled 미사용 테스트 정의 JUni..
[JAVA] DBCP (DB Connection Pool)
·
JAVA
DBCP 정의 미리 일정 수의 Connection을 만들어서 Pool에 담아 뒀다가 사용자의 요청이 발생하면 연결을 해주고 연결종료 시 Pool에 다시 반환하여 보관하는 데이터베이스 연결 캐시 DBCP 사용목적 DB에 Connection을 생성할 때 연결정보 생성 시간 비용이 많이 소모됨, DBCP를 사용하면 Connection 정보를 메모리영역에서 저장 / 관리하기 때문에 어플리케이션 단에서 비용 문제를 줄일 수가 있음 DBCP 장점 DB Connection 수를 제한할 수 있어 과다한 접속으로 인한 서버의 자원 고갈을 예방 DB 접속 모듈을 공통화하여 DB서버환경이 바뀔 경우 유지보수를 수월하게 함 메모리영역에 커넥션 정보를 관리하기 때문에 클라이언트가 그만큼 접속을 더빠르게 할 수 있음 DBCP 종..
[JAVA] Stack / Deque
·
JAVA
Stack 리스트의 한쪽 끝으로만 자료 삽입, 삭제 작업이 이루어지는 자료구조를 구현한 클래스 Vector를 상속받은 스택메모리 구조의 클래스를 제공 (Vector 동기화선언이되어 Deque Queue 인터페이스를 확장한 인터페이스 자료의 입출력을 양쪽 끝에서 할 수 있음 인덱스로 요소에 액세스, 삽입, 제거를 허용안 함 Stack / Deque 비교 Deque는 인터페이스로 구현해야 하기 때문에 객체지향설계 관점에서 Stack보다 더 낳은 유연성을 제공 Stack은 Vector로 상속받아서 구현한 클래스라 동기화되기 때문에 단일쓰레드 환경에서는 성능적 이슈가 발생할 수가 있음 Deque의 경우 멀티쓰레드 같은 경우 동기화 이슈가 발생할 수 있지만 ArrayDeque에 대한 동기화 데코레이터를 구현할 수..
[JAVA] e.printStackTrace() 사용하지 말아야하는 이유
·
JAVA
e.printStackTrace() 예외 발생 당시의 호출스택(Call stack)에 있던 메소드의 정보와 예외 결과를 화면에 출력함 예외 상황을 분석하기 위한 용도로 사용 (개발자에게 디버깅 할 수 있는 힌트를 제공) 사용하지 말아야 하는 이유 printStackTrace()를 call할 경우 System.err로 쓰여져서 제어하기가 힘듬 printStackTrace()는 java 리플렉션을 사용하여 추적하는 것이라서 많은 오버헤드가 발생할 수 있음 printStackTrace()는 서버에서 스택정보를 취합하기 때문에 서버에 부하가 발생할 수 있음 printStackTrace()는 출력이 어디로 가는지 파악하기 가 어려움 (톰캣같은 경우 catalina.out에 남음) printStackTrace()는..
[JAVA] List Collection(ArrayList / LinkedList / Vector)
·
JAVA
List Collection 데이터 중복 입력이 가능하며, 순차적이고 다량의 데이터를 입력할 때 사용 ArrayList / LinkedList / Vector로 구성됨 ArrayList 내부적으로 인덱스로 관리되는 배열로 이루어진 리스트 내부적으로 기본데이터 저장사이즈가 10으로 정의되어 있음 데이터가 10이상 저장되면, 동적으로 사이즈 1.5배정도 늘어남 인덱스를 통해 조회하기 때문에 조회시 효율적임 특정 인덱스를 삭제시 한칸씩 앞으로 전체이동하고 추가시 한칸씩 뒤로 전체이동하기 때문에 추가 삭제시 매우 비효율적임 동기화되어 있지 않아서, 동기화 처리시 동기화 선언을 해줘야함 LinkedList 노드가 데이터와 포인트를 가지고 한줄로 연결된 리스트 노드 간에 연결로 이루어짐 (현재노드에서 다음노드의 위..
[JAVA] String / StringBuilder / StringBuffer
·
JAVA
String 정리 기본타입(Primitive Type)이 아닌 참조타입(Reference Type) 불변(immutable)의 속성 (불변이라 멀티쓰레드 환경에서 쓰레드세이프함 / 값 변경 가능성이 없기 때문에 동기화 문제 X) String 객체는 String constant pool(Heap에 할당되어 있음)에서 따로 관리가 됨 String constant pool에서 String을 관리하면 Java는 Runtime 에서 Heap영역의 메모리를 절약함 (같은 값을 가지는 String에 대해 같은 메모리를 참조하기 때문) String은 결론적으로 Heap영역에서 관리하며 불변객체이기 때문에 문자열을 추가, 수정, 삭제를 하면 새로운 문자열을 만들어야 하기 때문에 Heap영역에서 많은 가비지가 생성되어 성..
[JAVA] HashMap 원리
·
JAVA
정의 Key-Value가 1:1로 Mapping되는 자료구조 Mapping으로 인해 삽입, 삭제, 검색이 평균적으로 O(1)인 자료구조 Key에 대한 해시값을 기반으로 값을 저장 및 조회하는 자료구조 개념 정리 HashMap은 기본적으로 내부구조는 배열로 되어 있음 Key는 직접 내부 배열의 인덱스가 될 수 있으며, 이를 버킷이라고 함 인덱스는 hashcode()에서 리턴하는 int값(정수값) % 실제 표현이 가능한 정수범위(n)보다 작은 M개의 원소로 만들어짐, 해당 인덱스는 1 / M 확률로 동일한 값으로 발생할 수 있으며, 이를 해시충돌이라고 함 해시충돌 방지 기법으로 Open Addressing 방식과 Seperate Chaning 방식이 있으며, Java HashMap 같은 경우 Seperate..
[JAVA] 일급컬렉션
·
JAVA
정의 Collection을 Wrapping하면서, Wrapping한 Collection 외 다른 멤버 변수가 없는 상태 예시 public class BookStore { private String name; private List books; } public class Book { private String name; private double price; } BookStore클래스에 List인 books를 선언하였음 해당 List books를 사용하지 않고, Wrapping 처리를 함 (아래 예시 참조) public class Books { /* Book을 Wrapping한 Books */ private List books; .. } public class BookStore { private Strin..
[JAVA] Map / getOrDefault
·
JAVA
getOrDefault 찾는키가 존재하면 해당 키의 값을 반환하고 없으면, Default 값을 반환하는 메소드 사용법 getOrDefault(Object key, V defaultValue) key : 값을 가져와야하는 요소 키 defaultValue : 지정된 키에 매핑 된 값이 없는 경우 설정 된 default 값 public class Main { public static void main(String[] args) { Map map = new HashMap(); map.getOrDefault("키", "기본값"); /* 결과 null로 나옴 */ System.out.println(map.get("키")); } } public class Main { public static void main(Str..