Programming/Java
-
[Java] StreamProgramming/Java 2024. 6. 16. 20:49
Stream APIJava는 객체지향언어이기 때문에 기본적으로 함수형 프로그래밍이 불가능하다.JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 Java를 이용해 함수형으로 프로그래밍할 수 있는 API를 제공한다.그 중에서 Stream API는 데이터를 추상화하고, 처리하는데 자주 사용되는 함수들을 정의해두었다.(데이터 추상화 : 데이터의 종류에 상관 없이 같은 방식으로 데이터를 처리할 수 있다는 것을 의미, 재사용 높임) 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 값 요소 Stream API의 특징1. 원본 데이터를 변경하지 않는다.원본데이터를 조회하여 원본의 데이터가 아닌 별도의 요소들로 Stream생성한다. 그렇기 때문에 원본의 데이터는 읽기만 할 뿐, 정렬이나 ..
-
[Java] currentTimeMillis() nanoTime() Instant.now() uuidProgramming/Java 2024. 5. 31. 16:09
Java는 시간 값을 측정하는 두 가지 기본 메소드를 제공한다. System.currentTimeMillis()는 현재 시간을 밀리초 단위로 반환한다.System.nanoTime()은 현재 시간을 나노초 단위로 반환한다. 두 가지 방법은 상당한 차이가 있다. 시간은 계속 흘러가기 때문에 시간을 고유한 값으로 사용하는 경우가 많다. 이런 경우 어떤 메소드로 사용해야 할지 알아보자. System.currentTimeMillis()밀리초 단위 사용(ms)1970년 1월 1일 UTC시작 시점을 기준으로 현재까지 계산시스템 시간을 참조(운영체제의 시간 값을 기준)-> 날짜와 날짜 사이의 갭을 구할 때 사용1초 = 1000밀리초 장점1. thread safe2. 항상 epoch이후 경과된 절대 시간을 반환한다. ..
-
[Java] Annotation, Reflection, Lombok, Spring BeanProgramming/Java 2024. 3. 14. 13:49
Annotation 어노테이션은 메타데이터(Metadata)라고도 불린다. ● 컴파일러에게 정보 알림 ● 컴파일할 때 설치(deployment)시의 작업을 지정 ● 실행할 때 별도의 처리가 필요 클래스, 메소드, 변수 등 모든 요소에 선언할 수 있다. 어노테이션은 상속이 안된다. 미리 만들어 놓은 어노테이션을 확장하는 것이 불가능하다. 어노테이션에 선언한 값을 확인하기 위해 Reflection을 사용한다. 리플랙션으로 클래스에 부여한 어노테이션 값을 취득할 수 있다. 기본 제공 3가지 JDK6까지는 미리 정해져 있는 어노테이션은 3개이다. 1. @Override 해당 메소드가 부모 클래스에 있는 메소드를 Override했다는 것을 명시적으로 선언. 제대로 Override했는지 확인하는 수단으로도 사용할 ..
-
[Java] Checked, Unchecked ExceptionProgramming/Java 2024. 3. 13. 16:03
자바 실행 시 발생할 수 있는 프로그램 오류를 Error와 Exception두가지로 구분한다. Error 시스템에 비정상적인 상황이 발생했을 경우 발생 메모리 부족(OutOfMemory Error), 스택오버플로우(StackOverflowError)와 같이 복구할 수 없는 것 Exception 프로그램 실행 중 개발자의 실수로 예기치 않은 상황이 발생 컴파일러가 에러처리를 확인하지 않는 RuntimeException클래스들은 unchecked 예외라고 하고, 예외처리를 확인하는 Exception 클래스들은 checked예외라고 한다. Checked Exception 반드시 에러 처리를 해야 한다(try-catch or thorw) Exception클래스의 하위 ● FileNotFoundException ..
-
[Java] OOME, JVM8 메모리Programming/Java 2024. 2. 29. 17:28
out of memory error 힙 메모리에서 발생하는 메모리 에러 OOME가 발생하는 시점은 대부분 개발이 완료된 후 사용자 테스트 및 인수 테스트 단계에서 많이 발생한다. 즉, 개발 단계에서 수행하는 단위 테스트의 경우 목적 기능에 대한 검중 위주로 진행되기 때문에 식별이 어렵고 가동 초기 단계 혹은 이와 유사한 테스트 환경에서 주로 발생하게 되는 것이다. OOME가 발생한 시점에 빠르게 대응해야 하는데 JVM Option을 통한 처리 방법과 Dump파일 분석을 통해 대응하게 된다. Java의 Reflaction기능을 이용하거나 Spring같은 프레임워크를 사용하는 경우 메모리를 고려하여 설계해야 한다. OOME 케이스 java.lang.OutOfMemoryError: Java Heap Space..
-
[Java] Spring 빌드 Jar, WarProgramming/Java 2024. 2. 29. 00:26
Spring 프레임워크를 빌드하면 나오는 실행 파일 포맷은 Jar, War 두가지이다. Gradle, Maven 같은 빌드 도구를 사용하여 빌드하면 하나의 산출물인 Jar, War파일이 생성된다. Jar파일은 JVM위에서 실행되지만, War파일은 WAS위에서 실행된다. Jar -> SpringBoot를 사용하는 경우 War -> JSP만으로 이루어져 있거나, 외부 WAS를 사용할 경우 사용하거나 필요에 맞게 배포(패키지)포맷을 정하면 된다. ● 외장 WAS를 사용하는 환경이라면 war배포 ● 내장 WAS를 써야하는 환경이라면 jar배포 ● jar와 달리 war는 WEB-INF 및 META-INF 디렉토리로 사전 정의된 구조를 사용하며, WAR파일을 실행하려면 Tomcat, Weblogic, Websphe..
-
[Java] Garbage CollectionProgramming/Java 2024. 2. 28. 01:36
GC JVM내에서 메모리 관리를 해주는 것. 쓰지 않는 객체(힙 메모리 객체가 null)인 경우 가비지 컬렉터의 대상이 된다. 사용자가 동적으로 생성한 객체가 있는 영역인 Heap메모리에서 동작한다. C++에서는 Heap영역의 메모리를 사용하기 위해 동적 메모리 영역을 할당 받고 해제하는 과정을 개발자가 직접 해야한다(메모리를 수동으로 직접 관리) → 메모리 영역을 할당 받고 해제하지 않으면 메모리 누수가 발생할 수 있고, 이미 해제한 메모리 영역을 또 해제하면 에러가 발생할 수 있다. → Java에서는 동적 메모리 영역(힙 메모리)를 GC가 관리하여 에러 발생 요인을 방지할 수 있다. GC를 수행하게 되면 GC를 수행하는 스레드를 제외한 모든 스레드가 중지된다. → 이것을 stop-the-world라고..
-
[Java] String 클래스Programming/Java 2024. 2. 6. 19:28
String public final class String extends Object implements Serializable, Comparable, CharSequence String 클래스는 final로 선언되어 있다. String 클래스는 자식 클래스를 양산할 수 없다. 모든 클래스의 부모 클래스인 Object클래스를 확장했다. - Serializable 인터페이스 : 구현해야 하는 메소드가 하나도 없는 특이한 인터페이스 - Comparable 인터페이스 : compareTo()메소드 하나만 선언되어 있다. - CharSequence 인터페이스 : 문자열을 다루기 위한 클래스 - StringBuilder, StringBuffer 클래스도 CharSequence인터페이스를 구현해 놓았다. 불변한 객..