Java 19

컬렉션 프레임워크

목차데이터를 다룰 때 타입에 따라 2가지 특징이 있었다 원시형: 빠른 속도. 편리한 기능 부족참조형: 느린 속도. 편리한 기능그렇다면 복수 개의 값을 처리하려면 배열을 사용하는 것을 고려해볼 수 있을 것이다. 하지만 배열의 경우 크기를 마음대로 조절할 수 없는 등 불편한 점이 있다. 이런 부분에 신경쓰지 않으며 편리한 기능들을 부가적으로 제공하는 자료형에 대한 요구가 계속 있었는데, 자바 1.2 버전에서 컬렉션 프레임워크를 통해 언어 차원에서 공식적으로 이를 제공하기 시작하였다. [컬렉션 프레임워크 특징]일관성 있는 API: 동일한 기능은 동일한 API를 갖는다. (List, Set 모두 데이터를 삽입할 때 add()를 사용한다)개발 비용 절약: 필수 데이터 구조와 알고리즘을 제공하여 개발자가 일일이 알..

Java 2024.10.05

원시 자료형 (Primitive Type) 과 참조 자료형 (Reference Type)

목차자바에서는 자료형을 2가지로 구분할 수 있다. 원시 자료형 (Primitive Type)참조 자료형 (Reference Type) 원시 자료형 (Primitive Type)보통의 int, boolean, float 같은 타입이다.C나 자바 같은 전통적인 프로그래밍 언어들은 원시자료형을 제공한다. 특징객체가 아님: 객체가 아니기 때문에 메모리에서의 위치를 통해 값을 직접 다루며 이 때문에 참조형에 비해 더 효율적이다.자동 형변환/암시적 형변환: 원시 자료형끼리 자동 타입 변환이 지원된다. (int를 long에 할당할 수 있다. 하지만 반대로는 명시적인 형변환이 필요)기본값: 원시 자료형은 기본 값을 가진다. int는0 boolean은 false, char는 null일 가진다 참조 자료형 (Referen..

Java 2024.10.03

Java가 빌드되고 실행되는 과정

목차[자바 코드 작성 (.java 파일 생성)]개발자가 코드를 작성하면 .java 파일이 생성된다.public class Main { public static void main(String[] args) { System.out.println("Hello, World!"); }} 컴파일자바 컴파일러 (javac)에 의해 바이트 코드로 변환되고 결과물은 .class 확장자를 가진 파일에 저장된다.이 파일은 사람이 읽을 수 없는 기계어와 비슷한 중간 코드이다. 아래 커맨드를 입력하면 .class 파일이 생성되고 바이트 코드의 결과물이 생성된다.javac HelloWorld.java [클래스 로딩]OS별로 (윈도우, 리눅스, 맥) JRE (Java Runtime Environment)가 ..

Java 2024.10.03

함수형 인터페이스 (Functional Interface) 에 대해

Java 8에서 도입된 개념. "단 하나의 추상 메서드를 가지는 인터페이스" 함수형 인터페이스의 경우 람다식을 통해 객체를 생성하거나 제어할 수 있음. 함수형 인터페이스의 특징 단일 추상 메서드: 함수형 인터페이스는 하나의 추상 메서드를 정의해야 함.람다식 지원: 함수형 인터페이스를 통해 람다식 사용 가능@FunctionalInterface 어노테이션: 함수형 인터페이스라는 것을 명시적으로 나타내기 위해, @FunctionalInterface 어노테이션을 사용할 수 있음. 선택사항이나 인터페이스가 하나의 추상메서드만 가지도록 강제하는 역할@FunctionalInterfaceinterface MyFunctionalInterface { void myMethod();} public class Main {..

Java 2024.10.03

제네릭 (Generic) 에 대해

개념2004년에 Java 5 버전이 등장하면서 추가된 기능.제네릭을 통해 더 안전한 코드를 만들 수 있게 되었다. 제네릭이란 클래스나 메서드에서 사용할 자료형을 컴파일 타임에 미리 지정하는 방식.이를 통해 컴파일 시점에 타입 검사를 해서 객체의 타입 안정성을 더 높일 수 있게 되었다. 제네릭 전후// 전List names = new ArrayList();names.add("이름");names.add(123123); // 런타임 오류 발생// 후 List names = new ArrayList();names.add("이름");names.add(123123); // 컴파일 시점에 미리 알 수 있음 그리고 제네릭이 처음 등장했을 때 변수뿐만 아니라 객체에도 타입을 선언해야 했다고 한다.// Java 5Map ..

Java 2024.10.03

Java의 주요 특징

캡슐화 (Encapsulation)객체지향의 중요 원칙 중 하나로 데이터(필드)와 그 데이터에 접근하는 방법(메서드)을 객체 안에 묶어 관리하고 외부의 직접적인 접근을 제한하는 것.이를 통해 객체 내부의 상태를 보호하고 외부와의 상호작용은 제한된 방식으로만 가능하도록 함. 캡슐화의 핵심은 접근 제어자를 사용하는 것.private: 클래스 내부에서만 접근 가능.public: 누구나 접근 가능protected: 같은 패키지 또는 상속받은 클래스에서 접근 가능default (아무것도 명시하지 않았을 때): 같은 패키지 내에서만 접근 가능객체 내부의 속성에 직접 접근하거나 수정하는 것을 방지하고 객체 내부에서 제공하는 메서드를 통해 안전하게 데이터를 다룰 수 있게 유도하기 위함. (getter, setter를 ..

Java 2024.10.03

OpenFeign 알아보기

목차[OpenFeign이란]Open Feign은 Netflix에 의해 처음 만들어진 Declarative(선언적인) HTTP Client 도구.Netflix OSS가 공개되고 나서 Spring Cloud 진영은 Spring Cloud Netflix라는 프로젝트로 Netflix OSS를 Spring Cloud 생태계로 포함시켰는데, Feign은 단독으로 사용될 수 있도록 별도의 starter로 제공되었다.이후에 넷플릭스는 내부적으로 feign의 사용 및 개발을 중단하기로 결정하였고, OpenFeign이라는 새로운 이름과 함께 오픈소스 커뮤니티로 넘겨졌다. 참고자료배민: https://techblog.woowahan.com/2630/로깅 설정 방법: https://cloud.spring.io/spring-c..

Java 2024.08.30

RestClient 알아보기

목차[RestClient?]RestClient는 SpringBoot 3.2에 추가된 것으로 기존 RestTemplate을 대체하게 될 것이며 reactive 한 기능도 포함되어 있다고 한다.  소개 문서: https://spring.io/blog/2023/07/13/new-in-spring-6-1-restclient가이드 문서: https://docs.spring.io/spring-framework/reference/integration/rest-clients.html RestClient는 Spring framework 6.1(Spring boot 3.2)에 새로 추가된 동기식 HTTP Client로 Spring 애플리케이션에서 REST API 호출을 위한 HTTP 요청을 보낼 수 있다.RestClien..

우아한 테크 세미나 Virtual Thread 내용 정리

목차[세미나 링크]https://www.youtube.com/live/BZMZIM-n4C0?si=-OcKsmlNlpjjhQk1 [내용 정리]일단 시작하기전에 virtual thread는 무조건 좋은 기술이 아니다. 상황과 필요에 맞게 사용하라고 한다.목차는 아래와 같다.  먼저 VT를 소개하는 시간이다.  회원 프로덕트 팀은 전사 보급을 위한 게이트웨이 시스템을 개발했다고 한다. 전사 대상이기 때문에 안정성과 처리량에 대한 고민이 많았다고 한다.그림을 보면 게이트웨이 시스템은 타 시스템의 앞에 위치에서 요청에 대한 사용자 인증같은 전처리를 수행 후 후속 시스템에 연결하는 방식이었다. 그래서 다양한 시스템의 트래픽이 대부분 유입된다. 그래서 선택지가 2개 있었다고 한다. 이 중에 Kotlin Corouti..

Java/Thread 2024.07.15

팩토리 메소드 디자인 패턴

[팩토리 메소드 디자인 패턴이란]객체지향 디자인 패턴중 하나.상위클래스에 알려지지 않은 구체화된 클래스를 생성하는 패턴이며, 하위클래스가 구체화된 클래스를 생성하도록 하는 것.기존 코드를 수정하지 않고, 새로운 인스턴스를 여러방법으로 생성할 수 있는 "확장에 열려있고 변경에 닫혀있는 객체 지향 원칙"을 지킬 수 있는 패턴.이러한 원칙을 만족하는 이유는 제품과 제품을 생성하는 팩토리가 느슨한 결합 구조를 가질 수 있기 때문.추상화와 다형성을 통해 이를 실현한다.동일한 인터페이스를 통해 구현된 객체들은 다형성을 이용하면 코드의 수정을 최소화할 수 있기 때문에 느슨한 결합을 가져갈 수 있는 것.[코드 수정이 최소화  될 수 있는 이유]객체를 생성하는 코드 부분을 분리 시켰기 때문에 객체를 추가수정이 일어 나더..

Java 2022.11.26

Windows 환경에 Zulu JDK 설치하기

[설치 경로] 다운로드: https://www.azul.com/downloads/ (msi버전 다운로드하고 설치) 기본설치경로: C:\Program Files\Zulu\zulu-11 [환경변수 설정] 환경변수 - 시스템변수 - JAVA_HOME 추가 - 변수값 (C:\Program Files\Zulu\zulu-11) 환경변수 - 시스템변수 - Path 편집 후 추가 (%JAVA_HOME%\bin) [확인] cmd에서 확인 C:\Users\jaeshim>javac Usage: javac where possible options include: @ Read options and filenames from file -Akey[=value] Options to pass to annotation processor..

Java 2022.11.20

유틸성 클래스를 만들기 위해 private 접근제어 활용하기

static 메서드들을 모아놓은 클래스는 기본적으로 인스턴스화를 시켜 사용하지 않는다. 우리가 Arrays를 사용할 때를 생각해보면 절대 Arrays arrays = new Arrays()로 생성하지 않고, Arrays.asList(배열)과 같은 형태로 사용하고 있다. Arrays클래스를 실제로 열어보면 아래와 같다고 한다. public class Arrays { public static boolean isArray(Object o) { ...} public static Object[] asObjectArray(Object array) { ...} public static List asList(Object array) { ...} public static boolean isNullOrEmpty(T[] a..

Java 2022.11.19

throw, throws에 대한 정리

[throw, throws의 차이] throw: 에러를 고의로 발생시킬 때 사용 throws: 자신을 호출한 상위 메소드로 에러 처리의 책임을 전가 시킴. [throw] 예외를 강제로 발생시킨 후 catch문을 통해 예외를 처리한다. public static void main(String[] args) { middleMethod(); } private static void middleMethod() { myException(); } public static void myException() { try{ throw new Exception(); }catch (Exception e){ System.err.println("myException 메서드에 오류 발생!"); } } //실행결과 : myExcepti..

Java 2022.11.19

Checked Exception, UncheckedException

[자바 예외의 종류] Error CheckedException UncheckedException [Error] 시스템에 비정상적인 상황이 발생한 경우. 에러는 개발자가 예측하기도 힘들고 컨트롤하기도 힘들다. ex) OutOfMemory [Exception] 예외는 프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생한 것을 말한다. 이러한 예외는 개발자가 직접 컨트롤하여 다르게 처리할 수도 있게 된다. ex) ArrayIndexOutOfBoundsException, NullPointerException, FileNotFoundException 예외의 종류 CheckedException UncheckedException 위 그림으로 보았을 때 RuntimeException 하위의 것들을 Unchek..

Java 2022.11.14

JPA?

JPA: 인터페이스 Hibernate: JPA인터페이스의 구현체. [JPA Components] EntityManager JPA 인터페이스의 일부로 자바 객체 ("@Entity")를 DB에 저장된 데이터와 맵핑 해주는 ORM 기술을 정의한 인터페이스 "@Entity" 어노테이션을 달고 있는 Entity 객체들을 관리하며 실제 DB테이블과 맵핑하여 데이터를 조회/수정/저장 하는 기능을 수행한다. PersistenceContext라는 논리적인 영역을 두어 내부적으로 Entity의 생애주기를 관리한다. Entity의 생애주기 New 처음 생성되어 아직 EntityManager의 관리를 받지 않는 상태. 즉 순수한 자바 객체 상태라고 보면 된다. Managed EntityManager에 의해 관리되고 있는 단계..

Java/JPA 2022.10.30

Annotation 정리

[AutoConfigurationBefore] Target.class 전에 어노테이션이 선언된 Class를 진행한다. [ConditionalOnProperty] Spring 기반 Application에서는 구성 속성의 존재와 값에따라 조건부로 빈을 생성해야 하는 케이스가 있다. ex) 속성 값을 "prod" 혹은 "test"로 설정했는지 여부에 따라 운영이나 테스트 데이터베이스를 가리키도록 Datasource 빈을 등록할 수 있다. 이럴때 사용하는 케이스 ConditionalOnProperty 어노테이션을 사용하면 구성 속성의 존재여부에 따라 조건부로 빈을 등록할수 있게 되는 것

Bean 생성

BeanDefinitionRegistryPostProcessor Spring에서 Bean을 동적으로 생성하는 방법 중 하나. 스프링에서는 보통 정적으로 Bean을 생성한다. 근데 DcmDatasource 같은 경우는 properties파일을 읽어다가 여러 개의 DcmDataSource Bean을 생성해야 한다. (configuration에서 dcm properties수가 몇개가 될 지 모르는 상황) 결국 동적으로 Bean을 생성해줘야하는 상황이다. 이럴 때 사용할 수 있다. ex) configuration에 언급된 에이전트 개수 (DB A서버,DB B서버..) 만큼 datasource를 만들어야 하는 상황 샘플코드 BeanDefinitionRegistryPostProcessor를 사용하기 위해서는 인터페..

Auto Configuration

[Auto Configuration?] AutoConfiguration을 알아보기 전에 "@SpringBootApplication"을 먼저 알아본다. "@SpringBootApplication"은 3가지 어노테이션을 합친것 "@SpringBootConfiguration": "@Configuration"과 같은 기능을 한다. "@EnableAutoConfiguration": "/reousrce/META-INF/spring.factories중 EnableAutoConfiguration에 정의된 Configuration들을 자동으로 빈등록한다. "@ComponentScan": 컴포넌트 어노테이션을 모두 스캔해서 빈으로 등록 이 때 ComponentScan이 먼저 일어난 후 AutoConfiguration의 B..

ClassPath (클래스패스) 란?

[Classpath?] 클래스패스란 말그대로 Java에서 클래스를 찾기위한 경로를 뜻함. Java는 JVM에서 실행되는데, 빌드 과정에서 .java라는 소스코드가 바이트코드인 .class 형태로 변환된다. 이때 Java Runtime으로 이 .class 파일에 포함된 명령을 실행시키려면 먼저 이 파일을 찾을 수 있어야 한다. 이 때 사용하는 것이 classpath이다. 참조 https://effectivesquid.tistory.com/entry/%EC%9E%90%EB%B0%94-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%EC%8A%A4classpath%EB%9E%80

Java 2022.10.27