Java & Spring 44

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

상속(Inheritance)이란

1. 상속이란?기존 클래스를 기반으로 새로운 클래스를 만드는 것이다. 자식 클래스는 부모 클래스의 필드와 메서드를 물려받는다. 상속은 is-a 관계일 때만 사용해야 한다. 자바에서 상속은 extends 키워드를 사용하며, 하나의 클래스만 상속할 수 있는 단일 상속 구조를 갖는다.class 상위클래스명 { // 필드와 메서드}class 하위클래스명 extends 상위클래스명 { // 상위 클래스의 멤버 사용 가능 + 추가 멤버 정의 가능} 핵심 목적공통된 속성과 동작을 부모 클래스에 정의자식 클래스에서는 재사용클래스 간 계층 구조 형성상속을 사용하면 클래스 간에 부모-자식 관계가 형성된다. 부모 클래스: 공통 개념자식 클래스: 부모 개념을 구체화한 하위 개념이러한 구조를 통해 객체 지향 프로그..

Java & Spring/Java 2026.01.06

Garbage Collection과 메모리 누수

1. GC란 무엇인가더 이상 사용되지 않는 객체를 자동으로 메모리에서 제거하는 JVM의 자동화 메커니즘이다. C/C++과 달리 Java에서는 개발자가 직접 메모리를 해제하지 않는다. 주의사항GC는 안쓰는 객체를 판단하지 않는다참조되지 않는 객체만 제거한다2. GC가 객체의 생존을 판단하는 기준객체의 논리적 사용 여부를 보지 않고, 오직 참조(reference)만 본다 GC Root란?GC는 특정한 시작점에서 참조를 따라가며 객체를 추적한다. 이때 시작점을 GC Root라고 한다. 대표적인 GC Root:stack에 있는 참조 변수static 변수JNI 참조📌 GC Root에서 도달 가능한 객체는 모두 살아 있는 객체이다. 즉 , 실제로 사용 안 해도 참조만 남아 있으면 GC 대상이 아니다 3. JVM..

JVM 메모리 구조

1. 메모리 구조 개요JVM은 실행 중 필요한 데이터를 영역별로 나누어 관리한다. 내가 배운 내용은 다음 3가지이다.Method AreaHeapStack 2. Method Area 저장되는 것클래스 메타데이터메서드 바이트코드static 변수특징클래스 로딩 시 생성JVM 종료 시 해제일반적인 GC 대상 아님3. Heap 영역 역할객체와 인스턴스 변수 저장GC의 주요 대상Heap 내부 구조Young Generation : Eden, SurvivorOld Generation대부분의 객체는 Young에서 생성되고 소멸, 오래 살아남은 객체만 Old로 이동함. 추후에 다룰 예정 4. Stack 영역 저장되는 것메서드 호출 정보 (Stack Frame)지역 변수매개변수참조변수(주소값)특징쓰레드 별 독립메서드 종료 ..

JVM이란 무엇이고, 어떻게 실행되는가

1. JVM이란 무엇인가JVM은 자바 프로그램을 실행하기 위한 가상 머신이다. 자바 코드는 OS에서 직접 실행되지 않고, JVM 위에서 실행된다. 이 구조 덕분에 자바는 다음 특성을 갖는다.OS에 독립적 동일한 .class 파일로 여러 환경에서 실행 가능Write Once, Run Anywhere2. Java 프로그램 실행 흐름.javajavac.class (바이트코드)JVM컴파일 결과는 기계어가 아닌 바이트코드이다. JVM이 이 바이트코드를 해석하거나 컴파일해서 실행함. 3. JVM의 전체 구성 요소Class LoaderRuntime Data AreasExecution Engine-> Class Loader로 부터 모든 것이 시작된다. 4. Class Loader의 역할Class Loader는 .cla..

생성자&this,this()

1. 생성자란?생성자는 객체가 생성되는 시점에 단 한 번 호출되는 특수한 메서드이다. 주 목적은 객체의 초기 상태를 보장하는 것이다.class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; }}생성자의 특징클래스명과 이름이 같다반환 타입이 없다객체 생성 시 자동 호출개발자가 직접 호출할 수 없다📌 생성자는 객체 생성 이후에 실행되는 메서드가 아니라 객체 생성 과정의 일부이다! 2. 기본 생성자(Default Constructor)생성자를 하나도 정의하지 않으면, 컴파일러가 생성자를 자동으로 추가한다. class A { int x..

Java & Spring/Java 2026.01.06

메서드

1. 메서드란?메서드는 객체가 수행할 수 있는 행동이다. 객체지향에서는 객체는 메서드를 통해서만 외부와 상호작용한다.class Person { void speak() { System.out.println("말한다"); }}필드 -> 상태메서드 -> 행동2. 메서드의 구조 [접근제어자] [기타제어자] 반환타입 메서드명(매개변수) { 실행 코드}public static int add(int a, int b) { return a + b;} 접근제어자: 외부 접근 범위변환 타입 : 결과 값의 타입메서드명 : 역할을 드러내는 이름매개변수 : 입력값메서드 바디 : 실제 로직3. 메서드 시그니처메서드 이름 + 매개변수 타입/순서 ❌ 포함되지 않는 것반환 값 접근 제어자4. 메서드 호출과 스택 ..

Java & Spring/Java 2026.01.06