본문 바로가기

BackEnd/Java8

[Java] Enum, Const 이야기 Enum 이란? 상수의 묶음이라고 생각하면 좋을 것 같다. 상수라고 한다면 프로젝트에 다음과 같이 구현해서 많이 사용한다. private final static String ACCOUNT_TRANSFER = "계좌이체"; private final static String REMITTANCE = "무통장입금"; Enum은 서로 연관된 상수들을 다음과 같이 묶어서 사용하기 위해 사용을 한다. @Getter @AllArgsConstructor public enum PayType { ACCOUNT_TRANSFER("계좌이체", "1"), REMITTANCE("무통장입금", "2"), CARD("카드", "3"), POINT("포인트", "4"), COUPON("쿠폰", "5"); private String ti.. 2023. 5. 7.
[Java] JUnit5 애플리케이션을 테스트하는 다양한 방법 이야기 2부 이 글은 백기선 님의 더 자바, 애플리케이션을 테스트하는 다양한 방법 강의를 듣고 복습 차원에서 적은 글입니다. JUnit5 : 태킹과 필터링 테스트 메소드에 태그를 추가할 수 있다. 하나의 테스트 메소드에 여러 태그를 사용할 수 있다. @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class StudyTest { @Test @DisplayName("스터디 만들기 - fast") @Tag("fast") void create_new_study() { System.out.println("create fast"); Study study = new Study(100); assertThat(study.getLimit())... 2020. 9. 22.
[Java] 더 자바, Java 8 이야기 1부 - 함수형 인터페이스 & 람다 이 글은 백기선 님의 더 자바, Java 8 강의를 듣고 복습 차원에서 적은 글입니다. Java 8 에서는 무엇이 바뀌었을까? 현재 자바 개발자 중 약 83%가 사용 중이라고 한다. 이 글을 통해서 확실히 공부해놓으면 좋을 것 같다. 함수형 인터페이스 (Function Interface) 추상 메소드를 딱 하나만 가지고 있는 인터페이스이다. SAM(Single Abstract Method) 인터페이스라고도 불린다. @FuncationInterface 어노테이션을 가지고 있는 인터페이스이다. @FunctionalInterface public interface Foo { void doIt(); } 람다 표현식 (Lambda Expressions) 함수형 인터페이스의 인스턴스를 만드는 방법으로 사용된다. 코드.. 2020. 9. 20.
[Java] 컬렉션 프레임워크(collection framework) 이야기 2부 - Set Set Collection Set의 특징으로는 List와는 다르게 중복 값을 허용하지 않는다. 또한 인덱스로 접근하지 않기 때문에 성능적으로 부족한 면이 있다. HashSet Set의 특징답게 중복값을 허용하지 않는다. 같은 요소를 추가하는 경우 false를 반환한다. (이러한 특징을 이용하면 알고리즘에서 중복 제거하기 편할 것이다.) 저장 순서를 유지하지 않으므로 저장 순서를 원한다면 LinkedHashSet을 사용해야 한다. 또한 null값을 저장할 수 있다. public class Main { public static void main(String[] args) { // Array System.out.println("==== Array ===="); String[] strings = {"a", "d.. 2020. 9. 18.
[Java] 컬렉션 프레임워크(collection framework) 이야기 1부 - List 최근 알고리즘에서 또는 JPA는 자바에서 기본으로 제공하는 Collection을 지원하고 있기 때문에 한번 정리할 필요성을 느꼈다. List Collection 색인(Index)을 사용하여 특정 위치에 요소를 삽입하거나 접근할 수 있으며 중복 요소를 허용한다. ArrayList&Vector 방식의 차이만 있을 뿐 사용방법은 거의 동일하다. ArrayList Vector 비동기 방식이다. 동기방식을 사용하더라도 Collections 클래스의 synchronized로 구현한다. 동기 방식이다. 데이터의 안정화를 보장하나 성능적인 측면에서 많이 부족하다. ArrayList vs Array ArrayList Array 사이즈가 동적이다. 추가시 메모리가 재할당되어 속도가 느리다. 다차원 구현이 불가능 하다. 사.. 2020. 9. 17.
[Java] JUnit5 애플리케이션을 테스트하는 다양한 방법 이야기 1부 - Assertion 이 글은 백기선 님의 더 자바, 애플리케이션을 테스트하는 다양한 방법 강의를 듣고 복습 차원에서 적은 글입니다. TDD(TEST-Driven Development) 테스트 주도 개발을 하는 곳이 많이 늘어나면서 테스트에 대한 확실한 공부가 필요하다고 생각했다. 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크 JUnit에 대해서 공부하겠다. JUnit은 자바 8 이상 가능한 JUnit5를 중심으로 공부하겠다. testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } JUnit5 = JUnit Platform.. 2020. 9. 15.
[Java] 가비지 컬렉션(GC, Garbage Collection) 이란? GC란 동적으로 할당된 메모리에서 사용하지 않는 객체를 수집하는 역할을 한다. 메모리가 가득 차게 되면 OutofMOutOfMemmory Exception이 발생한다. 앞서 JVM 메모리 구조에 대해서 공부했다면 동적 할당되는 메모리 부분은 Heap메모리 영역이라는 것을 알고 있을 것이다. 그렇다면 Heap 메모리 구조를 살펴보자! Eden 영역부터 Sevior 영역까지를 Young 영역이라고 한다. 즉, 크게 Young, Old, Perm 3가지 영역으로 나누어진다. [참고] JDK8부터는 Perm영역이 MetaSpace영역으로 대체되었다. MetaSpace영역은 Native 메모리를 사용하여 동적으로 공간을 확보하는 것으로 판단된다. 그렇다면 Heap 메로리 구조 안에서 객체는 어떻게 이동하는 것일까.. 2020. 9. 10.
[Java] 자바 가상 머신(JVM, Java Virtual Machine) 이란? JVM은 사전적 의미로 자바 바이트코드를 실행할 수 있는 주체다. JVM의 장점으로는 각 플랫폼에 독립적이다. JDK를 설치하기 위해서 OS에 맞는 파일을 찾아서 설치하는 것만으로도 알 수 있다. 그렇다면 JDK에 JVM이 포함되어 있나? 그렇다. JDK = JRE + Development Tools JRE = JVM + Library Classes 사실 JVM을 면접에서 또는 누군가 물어봤다면 다음 그림의 Runtime Data Areas의 역할을 제대로 알고 있는지가 궁금한 거라고 생각된다. Method Area : JVM 시작 시 생기는 영역으로 바이트코드가 저장된다. 클래스 정보, 변수 정보, static으로 선언한 변수가 저장되며 모든 스레드가 공유하는 영역이다. Heap : 동적으로 생성된 객.. 2020. 9. 8.