본문 바로가기

전체 글221

[Java API] 날짜와 시간 라이브러리 https://claremont.tistory.com/entry/%EC%8D%B8%EB%A8%B8%ED%83%80%EC%9E%84%EA%B3%BC-%ED%83%80%EC%9E%84%EC%A1%B4-%EA%B3%84%EC%82%B0 썸머타임과 타임존 계산ㅇ썸머 타임(일광 절약 시간: DST, Daylight Saving Time)보통 3월에서 10월은 태양이 일찍 뜨고, 나머지는 태양이 상대적으로 늦게 뜬다. 시간도 여기에 맞추어 1시간 앞당기거나 늦추는 제도를 썸claremont.tistory.com(참고) Java의 날짜와 시간 라이브러리 역사https://claremont.tistory.com/entry/%EC%88%98%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9E%90%EC%84%B.. 2024. 8. 27.
수용하는 자세에 대해서 자바의 표준 ORM 기술인 JPA의 역사를 아는가? 과거 자바가 제공하던 표준 ORM 기술은 매우 매우 불편했다. 이에 대응해 누군가가 하이버네이트라는 ORM 오픈 소스를 만들었는데, 이 기술이 자바 표준 ORM 기술보다 더 널리 사용되었다. 썬 마이크로시스템즈는 결국 하이버네이트를 만든 개발자를 데려와 새로운 자바 ORM 표준을 만들었고, 이것이 바로 오늘날의 JPA가 되었다.    자바의 java.time 패키지도 이와 비슷하다. 자바가 처음 표준으로 제공했던 Date와 Calendar 라이브러리는 사용성이 떨어지고, 여러 문제점이 많았다. 이러한 문제를 해결하기 위해 Joda-Time이라는 오픈소스 라이브러리가 등장했다. Joda-Time은 뛰어난 편리함과 사용성 덕분에 크게 대중화되었다. 이 상황.. 2024. 8. 25.
[Java API] enum 주요 메서드 정리 타입 안전 열거형 패턴 - Type-Safe Enum Pattern  ㅁenum 열거형: 타입 안전성을 제공하고, 코드의 가독성을 높이며, 예상 가능한 값들의 집합을 표현하는 데 사용정해진 객체만 사용할 수 있기 때문에, 잘못된 값을 입력하는 문제를 근본적으로 방지해 준다. (런타임 에러 아닌 컴파일 에러로 사전 차단)※ enum은 enumeration의 약자이다  (특징)1. 외부 생성도 컴파일 에러로 차단해준다.2. 열거형은 java.lang.Enum 를 자동(강제)으로 상속받는다..3. 열거형은 이미 java.lang.Enum 을 상속받았기 때문에 추가로 다른 클래스를 상속을 받을 수 없다. 4. 열거형은 인터페이스를 구현할 수 있다.5. 열거형에 추상 메서드를 선언하고, 구현할 수 있다. (이 경.. 2024. 8. 24.
[Java API] Math 클래스, Random 클래스 ㅇMath 클래스: 다양한 수학적 연산을 위한 정적 메서드를 제공하는 유틸리티 클래스따라서 객체를 생성하지 않고 클래스 이름을 통해 직접 메서드를 호출할 수 있다package lang.math;public class MathTest { public static void main(String[] args) { System.out.println("max(1, 3): " + Math.max(1, 3)); // 최대값 System.out.println("min(1, 3): " + Math.min(1, 3)); // 최소값 System.out.println("abs(-1): " + Math.abs(-1)); // 절대값 System.out.println();.. 2024. 8. 23.
[Java API] System 클래스 ㅇSystem 클래스: Java 프로그램 기본 시스템 기능에 접근할 수 있는 유틸리티 클래스e.g. 자바 프로그램의 표준 입력, 표준 출력, 시스템 속성, 환경 변수, 시간 측정 등의 기능을 제공※ 이 클래스는 상속할 수 없으며, 모든 메서드와 필드는 정적(static)으로 선언되어 있어 객체를 생성하지 않고 사용할 수 있다 (예시 코드)package lang.system;import java.util.Arrays;public class SystemMain { public static void main(String[] args) { // 현재 시간(ms)을 가져온다 long currentTimeMillis = System.currentTimeMillis(); S.. 2024. 8. 23.
[OOP] 리플렉션(reflection) ㅇ리플렉션(reflection): OOP에서 런타임에 프로그램의 구조를 검사하고 조작할 수 있는 메커니즘프로그램이 실행 중에 자신에 대한 정보를 탐색하거나, 구조를 동적으로 변경할 수 있다. 예를 들어, 클래스의 메타 정보를 기반으로 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고, 이들을 통해 객체 인스턴스를 생성하거나 메서드를 호출하는 작업을 할 수 있다. 이런 작업을 리플렉션이라 한다. 또 추가로 애노테이션 정보를 읽어서 특별한 기능을 수행할 수도 있다. 최신 프레임워크들은 이런 기능을 적극 활용한다. ※ reflection은 자아성찰이라는 뜻을 갖고 있다 리플렉션의 기본 개념메타데이터 접근: 리플렉션을 사용하면 클래스, 인터페이스, 메서드, 필드 등의 메타데이터(데이터에 대한 데이터)에 접근.. 2024. 8. 23.
[Java API] Class 클래스 ㅇClass 클래스: Java Reflection API의 중요한 부분으로, JVM에서 클래스, 인터페이스, 배열 등의 메타데이터를 표현하는 역할Class 객체는 Java의 모든 클래스와 인터페이스에 대해 자동으로 생성되며, 각 클래스와 인터페이스의 런타임 표현을 제공한다. 이를 통해 클래스의 구조, 메서드, 필드, 생성자, 애노테이션 등의 정보에 접근할 수 있다.다시 정리하면, Class 클래스를 통해 개발자는 실행 중인 자바 애플리케이션 내에서 필요한 클래스의 속성과 메서드에 대한 정보를 조회하고 조작할 수가 있다. [Class 클래스 주요 기능]- 타입 정보 얻기: 클래스의 이름, 슈퍼클래스, 인터페이스, 접근 제한자 등과 같은 정보를 조회할 수 있다- 리플렉션(reflection): 클래스에 정의.. 2024. 8. 23.
유지보수 vs 최적화 유지보수 vs 최적화를 고려해야 하는 상황이라면 유지보수하기 좋은 코드를 먼저 고민해야 한다. 특히 최신 컴퓨터는 매우 빠르기 때문에 메모리 상에서 발생하는 연산을 몇 번 줄인다고 해도 실질적인 도움이 되지 않는 경우가 많다. 코드 변경 없이 성능 최적화를 하면 가장 좋겠지만, 성능 최적화는 대부분 단순함보다는 복잡함을 요구하고, 더 많은 코드들을 추가로 만들어야 한다. 최적화를 위해 유지보수 해야 하는 코드가 더 늘어나는 것이다. 그런데 진짜 문제는 최적화를 한다고 했지만 전체 애플리케이션의 성능 관점에서 보면 불필요한 최적화를 할 가능성이 있다. 특히 웹 애플리케이션의 경우 메모리 안에서 발생하는 연산 하나보다 네트워크 호출 한 번이 많게는 수십만배 더 오래 걸린다. 자바 메모리 내부에서 발생하는 연.. 2024. 8. 22.
[Java API] 래퍼 클래스(Wrapper Class) ㅇ래퍼 클래스(Wrapper Class): 기본 자료형(Primitive Type)을 객체로 다룰 수 있게 감싸주는 클래스자바에는 8개의 기본 자료형이 있는데, 이들은 객체가 아니기 때문에 객체지향 프로그래밍(OOP)에서 요구하는 여러 기능을 지원하지 않는다. 예를 들어, 기본 자료형은 컬렉션 프레임워크(e.g. ArrayList, HashMap)와 같은 자바의 API를 사용할 때 문제가 될 수 있다. 이 문제를 해결하기 위해 자바는 각 기본 자료형에 대응하는 래퍼 클래스를 제공한다. 간단한 활용 예시: 래퍼 클래스를 사용하여 기본 자료형을 ArrayList에 저장import java.util.ArrayList;public class WrapperClassExample { public static .. 2024. 8. 22.