2026/01 30

Enum의 개념과 사용

1. Enum이란 무엇인가Enum은 서로 관련 있는 상수들을 하나의 타입으로 묶어서 표현하는 자바의 타입입니다. 즉, Enum은 단순한 상수 모음이 아닌 타입 그 자체이다. public enum OrderStatus { READY, PAID, SHIPPED, DONE} 2. Enum이 필요한 이유기존 상수 방식의 문제점public static final int READY = 0;public static final int PAID = 1;의미를 알기 어렵다 (매직 넘버)잘못된 값이 들어와도 컴파일 오류가 발생하지 않는다유지 보수가 어려움Enum이 해결타입 안정성 : 정해진 값만 사용할 수 있다의미 있는 코드 : 숫자 대신 의미가 드러나는 이름 사용컴파일 타임 오류 검출OrderStatus status..

Java & Spring/Java 2026.01.07

내부 클래스(Inner Class)

1. 내부 클래스란?내부 클래스는 클래스 내부에 선언된 클래스이다. class Outer { class Inner { }}외부 클래스와 논리적으로 강하게 묶인 클래스외부 클래스의 멤버에 접근 가능코드 구조를 더 명확하게 표현 가능2. 내부 클래스의 종류일반 내부 클래스 (Inner Class)static 내부 클래스 (Static Nested Class)지역 내부 클래스 (Local Inner Class)익명 내부 클래스 (Annonymous Inner Class)3. 일반 내부 클래스 (Inner Class)일반 내부 클래스는 외부 클래스의 인스턴스에 속하는 클래스이다.특징외부 클래스 객체가 있어야 생성 가능외부 클래스의 모든 멤버 접근 가능 (private 포함)class Outer { ..

Java & Spring/Java 2026.01.07

인터페이스와 선택 전략

1. 인터페이스란?인터페이스는 객체가 무엇을 할 수 있는지에 대한 규약이다. 구현은 포함하지 않고, 행위만 정의한다. 즉, 어떻게가 아닌 무엇에에 집중한다.interface Flyable { void fly();}인터페이스는 구현이 아니라 약속이다. 2. 인터페이스의 기본 특징다중 구현 가능클래스는 하나의 클래스만 상속할 수 있지만, 인터페이스는 여러 개를 동시에 구현할 수 있다.class Bird implements Flyable, Runnable { public void fly() {} public void run() {}}기능 단위로 조합 가능상속의 한계를 보완 메서드의 성격인터페이스의 메서드는 기본적으로 public, abstract 키워드가 자동으로 적용된다.interface P..

카테고리 없음 2026.01.07

추상화

1. 추상화란?추상화는 객체들의 공통적인 특징만 뽑아내는 것이다. 구현의 세부 내용보다는, 공통된 역할과 책임에 집중한다. 즉, 어떻게 동작하는지는 감추고, 무엇을 할 수 있는지만 드러낸다.추상화는 객체 지향 설계에서 구조를 단순화하고, 확장을 가능하게 만드는 출발점이다. 2. abstract 키워드abstract는 미완성 상태를 표현하는 키워드이다. 클래스, 메서드에 사용 가능하다. abstract 메서드구현부({})가 없다하위 클래스에서 반드시 구현해야 한다abstract class Animal { abstract void sound();} abstract 클래스 추상클래스는 0개 이상의 추상 메서드를 포함할 수 있는 클래스이다.abstract 키워드객체 생성 불가추상 메서드 + 일반 메서드 모..

Java & Spring/Java 2026.01.07

SOLID 원칙

객체 지향 설계를 위한 다섯가지 핵심 원칙이다. 코드의 유지보수성, 확장성, 결합도 감소를 목표로 한다. 면접 단골 질문이니 잘 기억해두자!!SRP - 단일 책임 원칙OCP - 개방/폐쇄 원칙LSP - 리스코프 치환 원칙ISP - 인터페이스 분리 원칙DIP - 의존성 역전 원칙1. SRP - 단일 책임 원책하나의 클래스는 하나의 책임만 가져야 한다. //위반 예시class UserService { void saveUser() { // 사용자 저장 } void sendEmail() { // 이메일 전송 }}//적용 예시class UserService { void saveUser() { // 사용자 저장 }}class EmailServic..

Java & Spring/Java 2026.01.06

다형성 (Polymorphism)

1. 다형성이란?다형성이란 하나의 타입으로 여러 형태의 객체를 다룰 수 있는 성질을 의미한다. 즉, 부모 타입의 참조 변수로 서로 다른 자식객체를 참조할 수 있고, 같은 메서드 호출이 객체에 따라 다르게 동작한다.코드의 결합도 감소구현 교체 용이확장에 유리한 구조2. Upcasting업캐스팅은 자식 객체를 부모 타입으로 참조하는 것이다.자동 형변환매우 안전class Animal { void sound() {}}class Dog extends Animal { void sound() { System.out.println("멍멍"); }}Animal animal = new Dog(); // 업캐스팅animal.sound();출력멍멍 특징업캐스팅 상태에서는 부모 클래스에 정의된 멤버..

Java & Spring/Java 2026.01.06

Getter/Setter와 관리 규약

1. Getter/Setter필드에 접근하지 못하게 하고 메서드를 통해서 접근할 수 있도록 만드는 방식Getter: 필드 값 조회Setter: 필드 값 변경-> 이를 통해 객체는 자신의 상태를 스스로 통제할 수 있음class User { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; }}외부에서는 age 필드에 접근할 수 없음. 2. 불변 규약불변 객체는 생성 이후 상태가 절대 변하지 않는 객체이다. 특징Setter 없음 -> 불변이기 때문모든 필드는 private생성자에서만 초기화상태 변경 메서드 없음-> 동시성 문제에 안..

Java & Spring 2026.01.06

캡슐화와 접근 제어자

1. 캡슐화란? 캡슐화는 객체의 내부 상태와 구현을 외부로부터 숨기는 것이다. 외부에서는 객체의 내부 구조를 알 필요가 없고, 메서드를 통해서만 객체를 사용하도록 제한한다.은닉 : 내부 구현을 감춤보호 : 객체 상태가 잘못 변경되는 것을 막음캡슐화를 통해 객체는 스스로의 상태를 책임지고 외부의 잘못된 접근으로부터 보호된다. 2. 캡슐화의 목적객체 내부 상태 보호객체 사용 방법 강제코드 변경 시 영향 범위 최소화객체의 책임과 역할 명확화캡슐화가 되어 있지 않으면 객체의 필드가 어디서든 수정될 수 있고, 그 결과 버그 추적이 매우 어려워짐 3. 접근 제어자란?접근 제어자는 클래스, 필드, 메서드에 접근할 수 있는 범위를 제한하는 문법 요소이다. 접근 제어자는 하나만 적용가능하다.private : 클래스 내부..

Java & Spring/Java 2026.01.06

Object 클래스

1. Object 클래스란?Object 클래스는 자바에서 모든 클래스의 최상위 클래스이다.자바에서 생성되는 모든 객체는 Object를 상속받는다.어떤 클래스든 Object 타입으로 참조할 수 있다.명시적으로 상속하지 않아도 자동으로 상속된다.자식 클래스의 경우 Object는 부모 클래스가 상속한다class Person {}public class Main { public static void main(String[] args) { Person p = new Person(); Object obj = p; // 업캐스팅 가능 }} 2. Object 클래스의 주요 메서드toString() : 객체를 문자열로 표현하는 메서드equals() : 두 객체가 논리적으로 같은지 비교하..

Java & Spring/Java 2026.01.06

오버라이딩(Overriding)과 super

1. 메서드 오버라이딩(Overriding)오버라이딩은 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것이다. 상속 관계에서만 사용할 수 있다. 조건메서드 이름 동일시그니처 동일반환 타입 동일접근제어자는 부모보다 좁아질 수 없음오버라이딩 시에 @Overrider 애노테이션을 사용하는 것이 권장된다. 컴파일 단계에서 재정의 여부를 검토해주기 때문이다.public class Main { public static void main(String[] args) { Bike bike = new Bike(); Car car = new Car(); MotorBike motorBike = new MotorBike(); bike.run(); c..

Java & Spring 2026.01.06