JAVA 20

[JAVA] 코드의 재사용을 상속(Inheritance)으로 모두 해결할 수 있을까?

프로젝트를 하다 보면, 반복되는 기능을 여러 클래스에서 재사용하고 싶을 때가 있다. 이럴 때 상속을 이용하면 재사용 가능하다. 상속(Inheritance)이란?상속(Inheritance)은 객체지향 프로그래밍의 개념 중 하나로, 기존 클래스의 기능을 자식 클래스가 물려받는 것을 말한다. 중복 코드를 줄이고, 공통 기능을 재사용하기 위한 수단이다.public class Animal { public void breathe() { System.out.println("숨을 쉰다"); }}public class Dog extends Animal { public void bark() { System.out.println("멍멍"); }}이렇게 자식 클래스인 Dog이 부..

JAVA 2025.06.11

[JAVA] 이터레이터 패턴(Iterator Pattern)이 없어도 될 것 같은데.. 왜 사용할까?

객체에 있는 자료구조를 접근할 때, 직접 객체에 접근하여 반복문을 사용하여 자료를 검색한다. 그럼 이터레이터 패턴을 사용해서 자료구조를 순회하는 이유는 무엇일까? 이터레이터 패턴(Iterator Pattern)이란?이터레이터 패턴은 컬렉션의 내부 구조를 노출하지 않고, 그 안의 요소를 순차적으로 접근할 수 있게 해주는 디자인 패턴이다. 컬렉션이 어떤 방식으로 데이터를 담고 있든, 우리는 그 구조를 몰라도 next() 함수로 다음 데이터를 알아 낼 수 있다. 구현// 집합 인터페이스interface Aggregate { Iterator createIterator();}// 이터레이터 인터페이스interface Iterator { boolean hasNext(); String next();}..

JAVA 2025.06.10

[JAVA] 프록시 패턴(Proxy Pattern)과 데코레이터 패턴(Decorator Pattern)

객체지향 설계에서 자주 등장하는 디자인 패턴 중 하나인 프록시(Proxy) 패턴과 데코레이터(Decorator) 패턴은 구조는 유사하지만 목적은 전혀 다른 패턴이다. 프록시 패턴이란?프록시(Proxy) 패턴은 실제 객체에 접근하기 전, 중간 객체를 통해 접근을 제어하는 패턴입니다. 이 중간 객체는 실제 객체와 동일한 인터페이스를 구현하며, 다음과 같은 용도로 활용된다.접근 제어 : 권한이 있는 사용자만 접근지연 로딩 : 실제 객체를 사용할 시점에 생성캐싱 : 동일 요청에 대해 미리 데이터를 준비해 놓고 빠른 응답로깅 : 호출 및 실행 내역 기록보안 : 요청 유효성 검사 등구현public interface Image { void display();}public class RealImage implem..

JAVA 2025.06.10

[JAVA] 옵저버 패턴(Observer Pattern)이란?

옵저버 패턴이란?옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메소드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 주체(객체)와 옵저버public interface ISubject { public void registerObserver(IObserver observer); public void removeObserver(IObserver observer); public void notifyObservers(); public Object getUpdate(IObserver observer);}public interface IObserver { void update();}public class ConcreteSub..

JAVA 2025.05.23

[JAVA] 전략 패턴(Strategy Pattern)이란?

전략 패턴이란?전략 패턴(Strategy Pattern)은 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화된 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 예를 들면 유저가 결제방식을 결정할 때 '신용카드', '카카오페이', '현금' 등 여러가지 방법으로 결제를 하게된다.public interface Payment { void pay(int amount);}일단 amount만큼의 금액을 지불한다는 pay() 추상 메소드를 Payment 인터페이스에 구현한다. public class KakaoPayment implements Payment { @Override public void pay(int amount) { S..

JAVA 2025.05.23

[JAVA] 팩토리 패턴(Factory Pattern)이란?

팩토리 패턴이란?객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 팩토리 패턴 구현enum PhoneType { APPLE, SAMSUNG}abstract class Phone { String name; public String Phone() { return name; }}class ApplePhone extends Phone { public ApplePhone() { name = "apple"; }}class SamsungPhone extends Phone { public SamsungP..

JAVA 2025.05.22

[JAVA] 싱글톤 패턴(Singleton Pattern)이란?

싱글톤 패턴이란?싱글톤 패턴(Singleton Pattern)은 디자인 패턴 중 생성 패턴으로 하나의 클래스에 오직 하나의 인스턴스만 가지도록 하는 패턴이다. 하나의 클래스를 기반으로 여러가지 인스턴스를 만들 수 있지만, 그렇게 하지 않고 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만든다. 싱글톤 패턴 구현public class Singleton { private static Singleton singletonInstance; // 생성자를 외부에서 접근하지 못하도록 private 접근제어 private Singleton() {} public static Singleton getInstance() { if (singletonInstance == nul..

JAVA 2025.05.20

[JAVA] 예외클래스와 예외처리

1. 예외(Exception)와 예외 클래스예외란? 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점과 에러와 비슷하다. 하지만 예외 처리(Exception Handling)을 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다. 예외에는 두 가지 종류가 있다.일반 예외와 실행 예외일반 예외는 프로그램 실행시 발생할 가능성이 높기 때문에 컴파일 하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다. 실행 예외는 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.  자바에서는 예외를 클..

JAVA 2024.12.08

[JAVA] Heap 메모리 구조와 Garbage Collection

자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리하한다. JVM의 메모리 공간은 크게 Static 영역, Stack영역, Heap 영역으로 구분되는데 Heap영역에 대해서 자세히 알아보도록 하자.1. Heap 영역JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역이다.참조형 데이터 타입을 갖는다 : 값이 저장되어 있는 곳의 주소값을 저장하는 공간이다.클래스인터페이스배열열거Heap 영역은 Stack 영역과 다르게 보관되는 메모리가 호출이 끝나더라도 삭제되지 않고 유지된다.stack은 스레드 갯수마다 각각 생성되지만, heap은 몇개의 스레드가 존재하든 상관없이 단 하나의 Heap 영역만 존재..

JAVA 2024.12.08

[JAVA] 중첩클래스, 중첩인터페이스

1. 중첩 클래스(Nested Class)중첩 클래스는 한 클래스 내부에서 정의한 클래스를 말한다. 중첩 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.인스턴스 멤버 클래스(inner class)static 키워드 없이 중첩 선언된 클래스를 말한다. 인스턴스 멤버 클래스는 인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언할 수 없다.class OuterClass { // 인스턴스 멤버 클래스 class InnerClass { InnerClass {} // 생성자 int field1; // 인스턴스 필드 void method1() { // 인스턴스 메소..

JAVA 2024.12.03