분류 전체보기 53

내부 클래스(Inner Class)

1. 내부 클래스란?클래스 내부에 선언된 또 다른 클래스로, 외부 클래스의 멤버(필드/메서드)에 자유롭게 접근할 수 있으며, 밀접하게 관련된 기능을 함께 묶어 설계할 수 있도록 도와준다. 또한, 내부 클래스를 활용하면, 코드의 응집도를 높이고, 캡슐화를 강화할 수 있다.1-2. 내부 클래스의 종류구분선언 위치외부 클래스 접근 가능 여부특징1. 인스턴스 내부 클래스외부 클래스의 멤버 위치외부 인스턴스 변수 접근 가능외부 클래스와 강한 결합2. 정적(static) 내부 클래스외부 클래스의 멤버 위치외부의 static 멤버만 접근 가능static 키워드 사용, 독립성 높음3.지역 내부 클래스외부 클래스의 메서드 또는 초기화 블록 내부final 또는 effectively final 지역 변수 접근 가능메서드 ..

자바 고급(JAVA) 2026.05.15

SOLID 원칙 - DIP(Dependency Inversion Principle)

1. DIP의 핵심 개념구체적인 클래스에 직접 의존하지 말고, 인터페이스(추상화)에 의존의존 방향을 뒤집어서, 유연하고 확장 가능한 구조를 만든다.※ DI(Dependency Inversion)과 DI(Dependency Injection)이 이니셜로 나타내면 똑같기 때문에 헷갈리는 경우가 많다. 핵심적으로 보면 같은 개념을 다른 관점에서 설명하는 것이라고 이해하면 편하다.1 - 1. 고수준 모듈과 저수준 모듈- 고수준 모듈 : 핵심 비즈니스 로직 (주문 서비스, 결제 처리 등)- 저수준 모듈 : 세부 구현 로직 (파일 저장, 데이터베이스 연동 등)interface Logger { void log(String msg);}class FileLogger implements Logger { publ..

자바 고급(JAVA) 2026.05.15

SOLID 원칙 - ISP(인터페이스 분리 원칙)

1. ISP란? - 하나의 커다란 인터페이스보다는 작고 구체적인 인터페이스 여러 개로 나누는 것이 좋다는 원칙이다. - 왜 중요할까? - 인터페이스가 너무 크면, 사용하지 않는 기능까지 구현해야 해서 불필요한 의존성과 결합이 생긴다. - 사용자는 자신이 필요한 기능만 정의된 인터페이스에 의존해야 유지보수가 쉬워진다.1 - 1. 인터페이스의 분리 기준 - 핵심 개념하나의 거대한 인터페이스를 쪼개서, 필요한 기능만 포함된 인터페이스를 각각 제공하자.작고 응집도 높은 인터페이스를 여러 개 만드는 것이 더 좋은 설계이다.interface Printer { void print();}interface Scanner { void scan();}interface Fax() { void fax..

자바 고급(JAVA) 2026.05.15

SOLID원칙 - LSP(리스코프 치환 원칙)

1. LSP란?- 상위 타입(부모 클래스)으로 하위 타입(자식 클래스)을 사용해도 프로그램의 동작에 문제가 없어야 한다는 원칙1 - 1. 계약에 의한 설계계약이란?메소드의 입력 조건(사전조건), 출력 조건(사후조건), 불변 조건 등을 명확하게 정해놓고 지키는 설계 방식LSP는 "자식 클래스도 이 계약을 지켜야 한다"는 원칙하위 클래스가 부모의 메소드를 재정의하더라도, 기존 계약을 위반해서는 안된다.위반 예시class Bird { void fly() { System.out.println("날아간다"); }}class Ostrich extends Bird { void fly() { throw new UnsupportedOperationException(); }}Ostrich는 Bird지만 날지 못..

자바 고급(JAVA) 2026.05.15

SOLID 원칙 - OCP(Open/Closed Principle)

1. OCP란? - Open-Closed Principle : “확장에는 열려 있고, 수정에는 닫혀 있어야 한다”는 설계 원칙으로 새 요구사항이 생겼다고 해서, 기존 클래스를 매번 수정하면 오류 위험 증가와 유지보수 비용 상승의 문제가 있기 때문에 기존 코드를 변경하지 않고, 새로운 기능은 확장을 통해 추가할 수 있도록 설계하라는 뜻이다. - 확장과 수정의 분리interface PayStrategy { void pay();}class CardPay implements PayStrategy { public void pay() { System.out.println("카드 결제"); }}class KakaoPay implements PayStrategy { ..

자바 고급(JAVA) 2026.05.14

SOLID 원칙 - SRP(단일 책임의 원칙)

1. SRP(Single Responsibility Principle)이란?- SRP는 단일 책임 원칙이라 하며, 클래스는 하나의 책임만 가져야 한다는 객체지향 설계 원칙이다."책임"이란?책임 = 역할 = 변경의 사유가 된다.하나의 클래스가 여러 이유로 변경된다면 → 책임이 둘 이상이다.올바른 책임 분리class Report { String title; String content;}class ReportPrinter { void print(Report report) { ... }}class ReportSaver { void saveToFile(Report report) { ... }} 2. 실제 코드에서의 적용 방법방법설명기능별 클래스로 분리하나의 클래스에 여러 역할을..

자바 고급(JAVA) 2026.05.14

객체지향 프로그래밍의 4가지 핵심 개념 - 추상화(Abstraction)

1. 추상화란?- "추상"의 사전적 정의는 사물이나 개념의 공통적인 본질을 추출하여 단순화하는 것이며, 자바에서의 추상화는 객체들의 공통적인 속성과 기능을 뽑아 상위 클래스로 정의하는 작업이다. 추상화를 통해 현실 세계의 복잡한 개념을 단순하고 명확하게 모델링할 수 있다.(예 : 자동차와 오토바이의 공통 기능(전진, 후진, 정지)을 추출해 Vehicle이라는 상위 클래스를 만들 수 있다.)1 - 2. 추상화의 필요성복잡한 시스템을 단순하게 표현할 수 있다.핵심 요소만 모델링하여 시스템의 이해도를 높인다.공통점을 기준으로 설계하면 코드 재사용성이 높아진다.중복 코드 제거, 유지보수 비용 절감유연한 구조 설계가 가능하다.구체 구현에 의존하지 않고 인터페이스 기반 설계 가능기능 확장과 교체가 용이하다.새로운 ..

자바 고급(JAVA) 2026.05.13

객체지향 프로그래밍의 4가지 핵심 개념 - 다형성(Polymorphism)

1. 다형성이란?영어로 poly(여러 개의) + morphism(형태)의 합성어로, 하나의 객체가 여러 형태를 가질 수 있는 성질을 의미한다.자바에서의 다형성이란, 상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조할 수 있는 성질을 말한다.다형성이 적용되면 참조 변수는 상위 클래스 타입이지만, 실제 호출되는 메서드는 오버라이딩된 하위 클래스의 메서드이다.1 - 2. 다형성이 왜 필요할까?여러 타입의 객체를 하나의 타입으로 관리가 가능하다.같은 메시지로 다양한 객체를 처리가 가능하여 코드가 간결화되고 코드 유지보수가 쉬워진다.새 객체가 생겨도 기존 메서드를 그대로 활용할 수 있어 확장에 유리하다.의존성을 줄여 결합도를 낮추고 유연하고 유지보수하기 쉬운 설계가 가능하다.1 - 3. 메서드 오버라이딩..

자바 고급(JAVA) 2026.05.12

객체지향 프로그래밍의 4가지 핵심 개념 - 캡슐화(Encapsulation)

1. 캡슐화란?특정 객체 안에 관련된 속성과 기능을 하나의 단위로 묶고, 외부로부터 데이터를 보호하는 객체지향 프로그래밍(OOP)의 핵심 개념이다. 객체가 제공하는 메서드를 통해서만 데이터에 접근하게 함으로써, 데이터 보호와 불필요한 외부 노출 방지라는 두 가지 목적을 달성한다.특징외부에서 객체의 속성을 직접 접근하지 못하도록 제한한다.데이터의 유효성을 검증할 수 있는 메서드를 통해 접근 가능하게 한다.객체 간 결합도를 낮추어 유지보수성을 향상시킨다.1 - 1. 캡슐화가 필요한 이유1. 필드에 직접 접근할 때의 문제점- 유효하지 않은 데이터 입력을 막을 수 없다.- 클래스 내부 필드가 변경되면 사용하는 모든 코드에 영향을 미친다.2. 캡슐화의 장점장점설명데이터 보호외부에서 필드 직접 접근 제한. sett..

자바 고급(JAVA) 2026.05.12

객체지향 프로그래밍의 4가지 핵심 개념 - 상속(Inheritance)

1. 상속이란상속은 기존 클래스(상위 클래스)의 멤버(필드, 메서드 등)를 새로운 클래스(하위 클래스)가 물려받는 것을 말한다. 이 떄, 하위 클래스는 상위 클래스의 기능을 그대로 사용하거나, 필요에 따라 확장하거나 재정의(Override)가 가능하다. 자바에서는 extends 키워드를 사용하여 상속을 구현한다.1 - 1. 상속의 장점과 단점- 장점코드의 재사용성 증가공통 코드를 상위 클래스에 작성하고 하위 클래스에서 재사용할 수 있다.계층적 구조 설계 가능클래스 간 관계를 명확하게 표현이 가능하다.(is-a 관계)다형성(polymorphism)의 기반 제공부모 타입으로 다양한 자식 객체를 처리할 수 있다.- 단점높은 결합도(coupling)하위 클래스가 상위 클래스의 변경에 민감해진다.유연성 저하자바는..

자바 고급(JAVA) 2026.05.12