Languages

Languages/Java

[Java] 컴포지션 (Composition)

컴포지션(Composition) 컴포지션은 다른 클래스의 객체를 더 큰 클래스의 일부로 포함시키는 방식이다. 이것은 "has-a" 관계를 나타내는데, 한 클래스가 다른 클래스를 포함하고 그 클래스의 기능을 사용할 수 있게 해준다. 컴포지션 vs 상속 컴포지션은 "has-a" 관계를 나타내며 한 클래스는 다른 클래스의 객체를 포함하고 있다. 상속은 "is-a" 관계를 나타내며 한 클래스는 다른 클래스를 확장(상속)한다. 예를 들어, 자식 클래스가 부모 클래스를 상속받는 경우 자식 클래스는 부모 클래스의 하위 유형이다. 컴포지션은 낮은 결합도를 가지며. 클래스 간의 결합도가 느슨하며 한 클래스의 변경이 다른 클래스에 큰 영향을 미치지 않는다. 상속은 높은 결합도를 가질 수 있으며 부모 클래스의 변경이 하위 ..

Languages/Java

[Java] Stream API

Stream이란? Stream은 자바 8에서 추가된 새로운 데이터 처리 추상화 개념으로, 함수형 프로그래밍을 지원한다. Stream vs Collection Collection 현재 자료구조가 포함하는 모든 값을 메모리에 저장하는 자료구조이다. 따라서 컬렉션 안의 모든 요소는 컬렉션에 추가하기 전에 계산되어야 한다. 외부 반복을 통해 사용자가 직접 반복 작업을 수행하여 요소를 가져온다. 즉, 개발자는 명시적으로 요소를 가져오기 위해 Iterator 또는 인덱스로 컬렉션을 순회해야 한다. Stream 요청할 때만 요소를 계산하는 고정된 자료구조이다. 스트림에 요소를 추가하거나 삭제할 수 없으며, 사용자가 요청할 때만 스트림에서 요소를 추출한다. 내부 반복을 사용하므로, 사용자는 추출되는 요소만 선언하면 된..

Languages/Java

[Java] Error & Exception

Error Error는 주로 시스템 레벨에서 발생하며, 개발자가 직접 제어할 수 없는 문제를 나타낸다. 주로 런타임 시 발생하며, 프로세스에 심각한 문제를 야기할 수 있어 프로세스를 종료시킬 수 있다. 대표적인 예로 'OutOfMemoryError'가 있으며, 이는 JVM 메모리 한계를 초과하거나, 너무 많은 클래스를 로드하거나, 메모리 부족 등과 관련된다. 시스템 관리자나 개발자가 개입하여 해결해야 하며, 프로그램 코드 내에서 예방하거나 처리하기 어렵다. Exception Exception은 주로 개발자가 작성한 프로그램 코드에서 발생하는 예상하지 못한 상황 또는 오류를 나타낸다. 프로그램의 실행 중에 발생할 수 있으며, 프로세스를 강제로 종료하지는 않지만 프로그램의 정상적인 흐름을 방해할 수 있다. ..

Languages/Java

[Java] Garbage Collection

Garbage Collection C/C++ 프로그래밍에서는 메모리 누수(Memory Leak)를 막기 위해 개발자가 직접 명시적으로 메모리 관리를 해야한다. 그러나 자바에서는 JVM이 구성된 JRE(Java Runtime Environment)가 제공되며, 그 구성요소 중 하나인 Garbage Collection(GC)이 자동으로 사용하지 않는 객체를 메모리에서 제거해준다. Stop-the-World 현상 GC가 사용하지 않는 객체를 메모리에서 해제하는 작업을 수행할 때, JVM이 애플리케이션 실행을 일시적으로 멈추는 것 stop-the-world 현상이 발생하는 시간을 최소화 하는 것이 성능 개선을 위한 주요 과제 중 하나이다. GC를 수행하지 않거나 GC를 해도 더 이상 사용 가능한 메모리 영역이 ..

Languages/Java

[Java] JVM (Java Virtual Machine)

JVM(Java Virtual Machine) 자바 프로그램 실행환경을 만들어 주는 소프트웨어이다. 모든 자바 애플리케이션은 JVM 위에서 실행되며, 이러한 특성은 자바가 "Write Once, Run Anywhere(WORA)"라고 불리는 특징을 구현하는 데 기여한다. 자바 언어와 JVM의 관계 : 자바 언어로 작성된 프로그램은 컴파일러를 통해 바이트 코드(bytecode)라는 중간 형식으로 변환된다. 이 바이트 코드는 특정 운영 체제나 아키텍처에 의존하지 않으며, 이로써 자바 프로그램은 어떤 환경에서도 실행될 수 있다. 운영 체제 독립성 : JVM은 특정 OS에 맞게 자바 바이트 코드를 해석하고 실행한다. 따라서 자바 프로그램은 운영 체제에 독립적이며, 자바 개발자는 프로그램을 한 번 작성하면 다양한..

Languages/Java

[Java] 고유 락 (Intrinsic Lock)

고유 락(Intrinsic Lock) 고유 락은 자바의 동기화 방법 중 하나로, 객체 단위로 동기화를 제어하는 데 사용된다. 모든 자바 객체는 내부적으로 고유한 락을 가지고 있다. 이 락은 synchronized 키워드를 사용하여 블록 또는 메서드 단위로 획득하고 해제할 수 있다. 이를 통해 한 번에 하나의 스레드 만이 해당 락을 획득하여 블록 내의 코드를 실행할 수 있다. synchronized 'synchronized' 키워드는 고유 락을 이용하여 스레드 간의 동기화와 상호 배제를 구현 public class SynchronizedExample { private int count = 0; // 1. public synchronized int increase() { return ++count; } //..

Languages/Java

[Java] 스레드 (Thread)

요즘 OS는 모두 멀티태스킹을 지원하는데 멀티태스킹을 가능하게 하는 요소 중 하나가 바로 '멀티스레딩'이다. 멀티스레딩은 하나의 프로세스 안에서 여러 개의 스레드가 동시에 작업을 수행하는 것을 의미한ㄷ. 스레드 구현 자바에서 스레드를 구현하는 방법은 크게 두 가지이다. 하나는 'Runnable' 인터페이스를 구현하는 방법이고, 다른 하나는 'Thread' 클래스를 상속하는 방법이다. 1. Runnable 인터페이스 구현 public class MyRunnable implements Runnable { @Override public void run() { // 스레드가 수행할 작업 내용 } } 2. Thread 클래스 상속 public class MyThread extends Thread { @Overri..

Languages/Java

[Java] Casting

캐스팅 (Casting) 캐스팅은 프로그래밍에서 변수의 타입을 변경하는 것이다. 캐스팅이 필요한 이유 1. 다형성 상속과 오버라이딩을 통해 부모 클래스와 자식 클래스 간에 다형성을 구현할 수 있고, 부모 클래스의 레퍼런스로 자식 클래스의 객체를 다룰 수 있다. 이때, 부모 클래스의 레퍼런스로 자식 클래스의 메서드를 호출하면, 오버라이딩된 메서드가 실행된다. 그러나 부모 클래스의 레퍼런스로는 자식 클래스에 추가된 메서드나 속성을 직접 호출할 수 없다. 이때, 캐스팅을 사용하여 부모 클래스의 레퍼런스를 자식 클래스로 캐스팅하면, 추가된 기능에 접근할 수 있다. class Animal { void makeSound() { System.out.println("Animal makes a sound"); } } c..

Languages/Java

[Java] 문자열 클래스 & 오브젝트 클래스

문자열 클래스 Java에서 문자열을 다루는 데에 사용되는 주요 클래스는 String, StringBuffer, StringBuilder가 있다. 모두 문자열을 표현하고 조작하는 목적으로 사용되지만, 내부적인 동작 방식과 특성이 다르다. String 클래스 String 클래스는 불변(Immutable)한 문자열을 표현하는 데 사용 즉, 한 번 생성된 문자열은 수정할 수 없으며, 문자열 연산 등의 작업을 수행할 때마다 새로운 문자열 객체가 생성 문자열 연산시 새로 객체를 만드는 오버헤드 발생 멀티스레드 에서 동기화를 신경 쓸 필요 X 문자열 연산이 적고, 조회가 많은 멀티스레드 환경에서 좋다. StringBuffer/StringBuilder 클래스 공통점 new 연산을 통해 클래스를 한 번만 만든다. (Mu..

Languages/Java

[Java] 직렬화 (Serialization)

직렬화(Serialization) 자바의 직렬화는 객체를 바이트 형태로 변환하는 기술을 말한다. 이를 통해 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 변환하여 전송하거나 저장할 수 있다. 직렬화/역직렬화 과정 // Employee라는 클래스를 정의 // Serializable 인터페이스를 구현함으로써 이 클래스의 객체는 직렬화 가능함을 나타냄 import java.io.Serializable; public class Employee implements Serializable { private String name; private int id; // getters, setters 생략 } 위 객체를 직렬화하는 코드 import ja..

dbssk
'Languages' 카테고리의 글 목록