일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 김영한
- 티스토리챌린지
- k8s
- 스프링 핵심원리
- effectivejava
- Effective Java 3
- 이펙티브자바
- 알고리즘정렬
- 스프링
- 자바
- Effective Java
- 오블완
- 이차전지관련주
- JavaScript
- 이펙티브 자바
- 코딩테스트
- java
- 카카오
- Spring
- 클린아키텍처
- 스프링핵심원리
- 스프링부트
- 예제로 배우는 스프링 입문
- 카카오 면접
- 엘라스틱서치
- ElasticSearch
- 자바스크립트
- 알고리즘
- kubernetes
- Sort
- Today
- Total
목록개발/java basic (25)
Kim-Baek 개발자 이야기
CompletableFuture는 Java에서 비동기 프로그래밍을 지원하기 위해 제공되는 클래스로, 주로 멀티스레드 환경에서 비동기 작업을 더 쉽게 관리하고 체이닝(연쇄 호출)과 조합을 가능하게 합니다. 이는 Future 인터페이스의 한계를 극복하기 위해 Java 8에서 도입되었습니다. 1. CompletableFuture란 무엇인가요?CompletableFuture는 비동기적으로 작업을 수행하고, 결과가 준비되면 콜백을 호출하거나 다른 작업을 이어서 처리할 수 있도록 설계된 클래스입니다.비동기: 작업이 완료될 때까지 기다릴 필요 없이 바로 다음 코드를 실행할 수 있음.완료 가능: 개발자가 작업 결과를 직접 설정하거나, 실패를 명시적으로 알릴 수 있음.체이닝 가능: 여러 작업을 순차적으로 연결해서 처리 ..
**자바 리플렉션(Java Reflection)**은 프로그램이 **런타임(runtime)**에 클래스, 메소드, 필드 등의 구조를 분석하고 제어할 수 있는 기능입니다. 즉, 컴파일 시점이 아니라 실행 중에 객체의 정보를 조회하거나 동적으로 조작할 수 있는 기술입니다.리플렉션이란? • 정적(Static) 방식: 일반적으로 자바 프로그램은 코드를 작성할 때 사용할 클래스, 메소드, 필드 등을 명확히 알고 있어야 합니다. 예: String str = new String(); • 리플렉션: 프로그램 실행 중에 동적으로 클래스 이름, 메소드 이름 등을 기반으로 객체를 생성하거나 메소드를 호출합니다.리플렉션으로 가능한 작업 1. 클래스 정보 얻기 • 클래스 이름, 패키지, 부모 클래스, 구현한 인터페이스 등을 조..
리액티브 프로그래밍은 비동기 데이터 흐름 및 이벤트 기반 프로그래밍을 구현하는 패러다임입니다. 데이터를 스트림 형태로 다루며, 시간이 지남에 따라 발생하는 이벤트를 처리합니다. 자바에서는 Reactor와 RxJava 같은 라이브러리를 통해 리액티브 프로그래밍을 구현할 수 있습니다. --- 자바에서 리액티브 프로그래밍의 핵심 개념 1. Publisher와 Subscriber Publisher: 데이터를 발행하는 역할. (e.g., Flux, Mono) Subscriber: 데이터를 구독하여 처리하는 역할. 이 둘은 Reactive Streams 표준 인터페이스를 따릅니다. 2. Mono와 Flux (Project Reactor 기준) Mono: 최대 하나의 데이터를 처리하는 Publisher. Mono m..
Box stringBox = new Box();stringBox.setValue("Hello");// stringBox.setValue(10); // 컴파일 오류: 타입 불일치1. 제네릭 타입 소거 (Generic Type Erasure)자바에서 제네릭(Generic)은 코드의 재사용성과 타입 안전성을 증가시키는 중요한 기능이지만, 자바 컴파일러는 **타입 소거(Erasure)**를 사용하여 제네릭을 처리합니다. 타입 소거란 컴파일 시점에서 제네릭 타입 정보를 제거하는 과정을 말합니다. 이 때문에 자바의 제네릭은 런타임에 타입 정보를 알 수 없으며, 컴파일 타임에만 제네릭이 유효하게 됩니다.제네릭 타입 소거의 동작 원리자바 컴파일러는 제네릭을 처리할 때, 제네릭 타입의 인스턴스를 실제 클래스 타입으로 변..
일급 컬렉션(First-Class Collection)은 소프트웨어 설계에서 컬렉션을 별도의 클래스로 감싸서 관리하는 패턴을 말합니다. 이 개념은 컬렉션(List, Set, 등)을 단순히 도메인 객체의 속성으로 사용하는 대신, 컬렉션 자체를 하나의 일급 객체로 취급하여 도메인 로직을 캡슐화하고 책임을 분리하는 데 목적이 있습니다.일급 컬렉션의 정의일급 컬렉션은 다음과 같은 특징을 가집니다:1. 단일 컬렉션 포장: 하나의 도메인 컬렉션만을 포함합니다.2. 불변성 유지: 컬렉션의 불변성을 보장하여 외부에서 직접 수정할 수 없게 합니다.3. 비즈니스 로직 포함 가능: 컬렉션 자체에 관련된 도메인 로직을 포함할 수 있습니다.4. 도메인 용어 사용: 컬렉션을 도메인 용어에 맞춰 네이밍하여 코드의 가독성을 높입니다..
제네릭(Generics)은 자바에서 컴파일 타임에 타입(type)을 검증하고, **코드의 재사용성과 타입 안전성(type safety)**을 높이기 위해 도입된 기능입니다. 제네릭을 사용하면 클래스나 메서드를 여러 타입에 대해 일반화(generalize)하여 작성할 수 있어, 다양한 데이터 타입을 처리하는 코드를 보다 효율적이고 안전하게 작성할 수 있습니다. 이번에는 자바 제네릭에 대해 상세히 설명하겠습니다.제네릭의 필요성자바는 **타입 안전성(type safety)**을 보장하기 위해 컴파일 시점에 타입을 확인합니다. 제네릭을 도입하기 이전에는 다양한 타입의 객체를 처리할 때 Object 타입을 사용하거나, 특정 타입으로 캐스팅(casting)하는 방식이 일반적이었습니다. 하지만 이러한 방식은 다음과 ..
자바의 컬렉션은 가변이다. 이 때문에 발생하는 문제를 먼저 살펴본다 6.1 package travelator; public class Suffering { public static int sufferScoreFor(List route) { Location start = getDepartsFrom(route); List longestJourneys = longestJourneysIn(route, 3); return sufferScore(longestJourneys, start); } } start 가 별게 없어서 인라인 한다. (6.2) 6.2 public static int sufferScoreFor(List route) { List longestJourneys = longestJourneysIn(rou..
POJO? Plain Old Java Object public class CoffeePOJO { public String name; private List ingredients; public CoffeePOJO(String name, List ingredients) { this.name = name; this.ingredients = ingredients; } void addIngredient(String ingredient) { ingredients.add(ingredient); } } 자바 빈(Java Bean) 공식 자바 빈 문서에 따르면 자바 빈은 아래의 조건을 모두 충족하는 POJO이다. (DTO라고도 한다함) 모든 객체 변수는 Private 제한자를 가지며 getter 와 setter 함수를 ..
- Type 통일 : 부모타입에 자식객체를 모두 대입가능 상속 -> 다형성 + overriding -> abstract -> Interface - 코드 재사용 -> 타입통일 : 다형성을 위해 사용이 된다. ※ 객체와의 좋은 관계 1. high cohesion (높은 집중도) (하나의 클래스가 하나의 일만 하자) : 단일 책임 2. loose coupling (느슨한 연결) - 관계가 깊을수록 다른 쪽에 영향을 끼칠 가능성이 많다. ◎ 내부 class (Nested class, inner class) - JDK 1.1 에서 추가되었다. GUI에 대한 것이 많이 바뀌게 되었는데, 그것을 지원하기 위해 나오게 되었다. class A{ class B{ } -> class 안에 class를 정의 -> 외부 cla..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ abstract - 메소드와 class 에 붙는 제한자 (modifier) - 추상의 , 구현되지 않은 이라는 의미 ex) public abstract class A { } 이렇게 추상적인 클래스의 경우 하위클래스에서 재정의 (오버라이딩) 해야하는데 이는 강제가 아니다. -> 다른메소드를 만들 수도 있고, 안만들 수도 있고 자기 마음대로 하게된다. => 이것을 강제하는 것이 abstract 메소드이다 ※ Animal 의 경우 타입으로는 많이 쓰인다. 하지만 실제 new Animal 로 객체를 생성해서 쓸일은 많이 없다 ex) 동물원에서 개 , 고양이 객체를 생성하지 동물객체를 생성하지는 않는다. => 부모클..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ super - 부모객체를 의미한다. this 는 (현재)이 객체 - super.부모객체의 멤버 -> 부모객체의 instance 변수/메소드 호출시 사용 ※ super . 는 생략하더라도 보통 컴파일러가 알아서 처리! - ★ super( [값, ...] ) -> 부모객체의 생성자 호출 -> 생성자 구현부의 첫 구문으로 와야한다 (this(), super()는 같이 올 수 없어!) -> 생성자 구현부에 this () 나 super 가 없으면 super(); 가 첫 구문으로 들어가게 된다 public A( ){ super(); 부르기 -> 상위 클래스의 객체를 자동으로 만들어서 같이 묶어서 사용할 수 있도록 하기..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ※원래 프로그램은 내부에서 연관을 갖고 동작했다.(절차지향적에서) 모듈화를 했다고 해서 그 연관이 사라지는 것이 아니다. 그것을 모듈과의 관계로 표현한다. ◎ 의존관계 (Dependency) ※Association(의존관계) ⊃ has a ⊃ Aggregation ⊃ composition ⊃ use a - 의존관계의 의미 : 하나의 객체가 일하기 위해 다른 객체에 의존(필요로 하는) 관계 ->메소드 메소드, 함수 : 제공하는 기능(println()) 메소드 내에서 사용하는 관계 -> local 변수로 사용 - has a(포함) 관계 : 하나의 객체가 다른 객체를 자신의 속성으로 가지고 있는 관계 -> Insta..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ Static 키워드(제한자) - instance 변수, 메소드, static block, inner class 에서 사용된다. - 의미 : Class 의 멤버 -> 객체와는 관계없다 (단 한개만 존재하게 된다) - Card 클래스에서 kind 나 number의 경우 각 카드마다 달라지는 값이다 그러나 weight, height 의 경우 모든 카드에 동일한 값이다! -> Class 에 종속시키자 (Static) ex) Class A{ static int var; -> new A( ) 를 했을 때, var과 go()는 객체안에 존재하지 않는다. static void go( ){ } } ※ 메모리 영역 - hea..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ※ class loading : 하드에 있는 자바파일을 cpu 가 빠르게 처리하기 위해 Main Memory 에 올리는 것(JVM이 처리) ※Heap 내부의 내용을 없애는 시점 : 더 이상 사용할 수 없을 때 ex) new A( ) -> 값을 사용할 수 없다. 지정되지 않음! : JVM 이 처리한다. ※ reference 타입은 메모리에 동일한 크기로 주소가 잡힌다 (4byte) primitive 타입은 각각 크기에 맞게 공간을 할당한다. ※ 메소드가 찾는 것은 기본적으로 Local 변수이다. 없으면 instance 변수도 확장해서 찾게 된다. this 를 컴파일러가 추가해서 인스턴스 변수를 찾게 된다. ※ M..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 자바의 메모리 영역 ※ class loading : 하드에 있는 자바파일을 cpu 가 빠르게 처리하기 위해 Main Memory 에 올리는 것(JVM이 처리) 1. Heap (힙) 영역 - instance 가 저장되는 영역 - instance 변수 2. execution stack (실행스택) 영역 - 실행 중인 메소드의 지역변수들이 저장되는 영역 3. 메소드 (class) 영역 - class 변수(class 코드)들이 저장되는 영역 public class Worker { 25? true : false; Person per = new Person(); Person per2 = new Person(); per..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ this( [ 값, ... ] ) 의 사용 - 생성자에서 오버로딩된 다른 생성자 호출시에 사용한다 - 반드시 생성자 구문의 첫 명령으로만 올 수 있다. ex) this( ); , this( 10 ); , this( 10, "abc" ); -> 생성자에서 다른 생성자를 호출하고 싶을 때 사용! * A( ) { 다른 내용 -> 조건문이나 반복문의 사용도 허용이 안된다. 무조건 첫번째에 와야한다. this( 10 ) } * A ( int i , int j , String s ){ this.i = i; this.j = j; -> 이 두줄을 this( i, j ) : 코드의 편리를 위해. i, j 는 다른 생성자에서..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 배열의 리턴 int go() { return new int{10, 20, 30}; -> 배열 넘길때 사용 } ◎ 리턴(return) - 호출한 곳 (caller 메소드) 로 돌아가라 구문 : return [ 값 ]; - 1개의 값 -> 메소드의 retun type이 void 인 경우 생략가능 하지만 다른 type 인경우 반드시 return 구문 실행이 보장되어야 한다. ◎ 메소드 and 생성자 오버로딩 (overloading) - 매개변수가 다르면 같은 메소드 이름을 여러거 메소드에 사용할 수 있다. -> 쓰는 사람이 편해진다. -> 개수나 타입 class A{ void a( ) { } int b ( int..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 객체와 클래스 - 객체 (instance) -> 존재하는 것 (유, 무형) - 품사로는 명사 - 클래스 (class) - 너무 범위가 작거나 큰 것은 클래스로 유효하지 않다. ex) 고객은 이름, 나이, 주소를 갖는다. -> 값 1개 : 클래스로 하기에는 작다 * 하지만 이름이 성, 본관, 이름 등 분류되서 사용되는 경우에는 class 가 될 수도 있다. ※ 공통점을 뽑아내는 과정 -> 추상화 ◎ 클래스 다이어그램 - 세 칸의 표를 통해서 클래스의 선언을 다이어그램으로 나타낼 수 있다. 맨 위칸에는 클래스의 이름, 두 번째칸에는 클래스의 속성, 세 번째 칸에는 클래스의 동작을 넣는다 [ modifier ] ..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ IDE (Intergrated (통합), Development (개발), Environment(환경)) - javac.exe, java.exe 와 같은 개발에 필요한 여러 프로그램을 묶어준 것.프로그램의 개발 Tools 이다.( Eclips, Intelli J, NetBeans 가 대표적) -> Plug in 기능이 있어 tool을 개발해 기능추가가 가능 (확장성) ◎이클립스의 사용 - Perspecitive ( 개발 Tool 별 전체화면 ) -> 이클립스 안에는 자바, 디버깅, 형상관리 등 어러 프로그램이 내장되어 있다. 이때 각 각 개발하고자 하는 Tool 마다 화면이 다른데, 이 화면이 Perspect..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 자바의 입출력(I/O) Data ------ 입력 ------> program ------- 출력 -------> 모니터 - 입력은 외부로부터 값을 받아오는 것 - 출력은 값을 모니터와 같은 곳에 출력하는 것 ex)System,out.print("안녕"); ◎ Scanner - Java 1.5 부터 추가된 기능으로 유저에게 입력기능을 제공한다. 사용하기 위해서는 class 의 밖에 맨처음 줄에 import java.util.*; 이 필요하다 - 사용법 Scanner 변수명(일반적으로 sc 를 많이 사용) = new Scanner(System.in) - 문자를 읽는 스캐너를 생성하는 코드 String str ..