본문 바로가기

Back-end/Java

(89)
[Java] CompletableFuture로 비동기 적용하기 ✅ 비동기 처리비동기 처리는 특정 작업이 다른 작업과 독립적으로 동작하도록 하여 다음 단계의 작업이 이전 작업의 완료를 기다리지 않고 동시에 실행할 수 있도록 하거나, 특정 작업의 완료를 기다리는 동안 다른 작업을 처리할 수 있는 장점이 있습니다. 흔히 사용하는 방식은 동기적 처리로 한 작업이 완료되기를 기다렸다가 다음 작업을 순차적으로 실행하도록 구현하는 방식이고, 함께 알아볼 비동기 처리는 여러 작업이 동시에 실행될 수 있고, 다른 작업의 완료를 기다리지 않고 실행하여 시스템의 자원을 최대한 활용할 수 있는 방식입니다. 비동기 처리를 통해 성능 향상, 시스템 활용도 증가, 동시성 관리, 자원 활용 등의 장점을 누릴 수 있지만,복잡성 증가, 디버깅의 어려움, 가독성 감소와 같은 단점을 함께 고려해야 할..
[Java] Static 개념 / 메모리 / 장단점 ✅ Static이란Static은 '고정된'이란 뜻이며 정적이라고도 부른다. 클래스, 변수, 메서드에 static을 붙이면 말 뜻대로 고정된 클래스, 변수, 메서드가 된다. ( static 멤버 = 정적 멤버 ) 정적 클래스는 생성자를 포함할 수 없고, 모든 멤버는 static으로 선언해야 한다. 정적 변수와 정적 메소드는 어떤 객체에 소속되지 않고, 클래스에 고정되어 있다. 객체에 소속되지 않으므로 객체 생성 없이 사용할 수 있다.또한, 정적 메서드 내에서는 인스턴스 변수를 사용할 수 없다. Static이 붙은 변수나 메서드는 객체를 생성하지 않고도 사용할 수 있다 ✅ 예제 코드public class StaticExample { // 정적 변수 (모든 인스턴스가 공유) static int ..
[JAVA] 컴파일 과정 ✅ 들어가기전자바는 OS에 독립적인 특징을 가지고 있다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하자 ✅ 자바 컴파일 순서 소스 코드 작성 (.java)자바 컴파일러(javac.exe)가 자바 소스 코드를 바이트 코드(.class)로 컴파일바이트 코드는 아직 컴퓨터가 읽을 수 없는 JVM이 읽을 수 있는 코드컴파일된 바이트 코드를 JVM의 클래스 로더(Class Loader)에게 전달클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area의 Method ..
[JAVA] 추상클래스, 인터페이스 특징 및 차이점 ✅ 추상 클래스, 인터페이스 공통/차이 정리 표 ✅ Abstract, Interface 의 공통점 추상 메서드라는 내용에 대한 구현이 없는 선언부만 가지고 있는 메서드를 가지고있음독립적으로 객체를 생성할 수 없음여러 곳에서 사용될 공통된 기능에 대한 구현을 강제하기 위한 기능추상 메서드: 구현부 없이 선언부만 가지고 있는 멤버 메서드 abstract class Animal { // 숨쉬기(일반 메서드(선언부 + 구현부 존재) void breath() { System.out.println("숨쉬기"); } // 울음소리(추상 메서드(선언부만 존재) abstract void cry();}interface Flyable { // 날기(추상 메서드(선언부만 존재) void fly();} 독립적으로 객체..
[Java] final 키워드 심화 정리 이전글에 final 기본을 포스팅이 있었다.그런데 너무 짧고 간단하게만 정리한거같아 오늘은 final 키워드에 대해서 더 자세히 공부할려고한다.!✅ finalfinal 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다. 이 final 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가집니다. 하지만 final 키워드를 붙이면 무언가를 제한한다는 의미를 가지는 것은 공통적이 성격입니다. ✅ 변수에 사용했을 경우변수에 final을 붙여보겠습니다. 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다. 수정될 수 없기 때문에 초기화 값은 필수적입니다. 만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 허용합니다. ..
[Java] 가비지 컬렉터(GC) 이해하기 ✅ GC(가비지 콜렉터)란?자바에서는 메모리를 GC라는 알고리즘을 통하여 관리(automatic memory management)하기 때문에, 개발자가 메모리를 처리하기 위한 로직을 만들 필요가 없고, 절대로 만들어서는 안됩니다. Garbage Collection. 자바에서 쓰레기는 객체입니다. 하나의 객체는 메모리를 점유하고, 필요하지 않으면 메모리에서 해제되어야 합니다. 메모리 점유는 다음과 같이 쉽게 할 수 있습니다. 이러한 코드에서 a라는 객체가 만들어져 메모리의 한부분을 점유하게 되고, 특정 메소드 호출한 후 수행이 완료되어 해당 객체가 더이상 필요없는 객체, 쓰레기가 됩니다. 이 쓰레기 객체를 효과적으로 처리하는 작업을 GC라고 합니다. ✅ GC(가비지 콜렉터)의 원리 GC 작업을 하는 가비..
[JAVA] 문자열 앞뒤 공백 제거하기 trim() vs strip() 차이 ✅ 문자열 앞뒤 공백 제거하기 trim() vs strip() 차이 🖥️ trim()public class StringSpace { public static void main(String[] args) { // 앞뒤로 공백이 있는 문자열 String str = " Hi Anna! "; // 공백 제거 (trim()) String trimStr = str.trim(); // 공백 제거 문자열 출력 System.out.println("원본 문자열 : '" + str + "'"); System.out.println("trim 문자열 : '" + trimStr + "'"); }}// 원본 문자열 : ' Hi An..
[JAVA] 정적 팩토리 메서드란 무엇이고 왜 사용할까? ✅ 정적 팩토리 메서드쉽게 말해 생성자로 인스턴스를 생성하지 않고, static Method를 사용해 인스턴스를 생성하는 방식이다.간단한 예시로 여러 장르(genre)를 가지는 게임(Game) 객체에 대한 코드를 살펴보자.생성자public class Game { private String genre; public Game(String genre) { this.genre = genre; }}public static void main(String[] args) { Game game = new Game("FPS"); } 정적 팩토리 메서드 public class Game { private String genre; private Game(String ..