새발블로그

[JAVA] 클래스 본문

Language/Java

[JAVA] 클래스

EUG 2025. 5. 4. 18:38

1. 클래스의 구성 요소

1.1 멤버변수 (Fields)

  • 인스턴스 변수 (Non-static): 각 객체마다 독립적으로 존재하는 변수. 객체가 생성될 때마다 메모리에 할당.
  • 클래스 변수 (Static): 클래스가 메모리에 로드될 때 한 번만 생성되고 모든 객체가 이를 공유하는 변수. static 키워드를 사용하여 선언.

1.2 생성자 (Constructor)

  • 생성자는 객체가 생성될 때 호출되는 특수한 메서드로, 객체의 초기화를 담당.
    • 기본 생성자: 매개변수가 없는 생성자.
    • 매개변수가 있는 생성자: 객체 생성 시 초기화할 값을 전달받아 설정.
  • 생성자는 객체 생성 시 자동 호출되며, 리턴값이 없다.
  • 자바는 소멸자가 없고, 메모리 관리는 JVM에서 자동으로 한다.

생성자 예시:

class Person {
    String name;
    int age;

    // 기본 생성자
    Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 매개변수 있는 생성자
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

1.3 메서드 (Methods)

  • 메서드는 객체의 행동을 정의하는 함수로, 객체 사이에서 데이터를 주고받기 위해 사용된다.
  • 메서드 오버로딩: 동일한 이름의 메서드를 매개변수의 개수나 타입으로 구분하여 여러 번 정의할 수 있다.

메서드 예시:

class Calculator {
    // 덧셈
    int add(int a, int b) {
        return a + b;
    }

    // 메서드 오버로딩: 다른 매개변수 타입
    double add(double a, double b) {
        return a + b;
    }
}

1.4 this 키워드

  • this는 현재 객체를 참조하는 예약어로, 동일한 이름의 인스턴스 변수와 메서드 매개변수를 구분할 때 사용된다.
  • this()는 다른 생성자를 호출할 때 사용된다.

예시:

class A {
    int x;

    A() {
        this(10); // 다른 생성자 호출
    }

    A(int x) {
        this.x = x;
    }
}

 

2. 객체와 클래스

2.1 클래스와 객체의 차이

  • 클래스: 객체를 생성하기 위한 틀(청사진)
  • 객체: 클래스로부터 생성된 실체로, 메모리에 저장된다.

객체 생성 예시:

// 클래스 선언
class Car {
    String model;
    int year;

    Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
}

// 객체 생성
Car myCar = new Car("Tesla", 2023);

 

 

3. JVM 메모리 구조

     
  탑재시점 소멸시점
static 변수 클래스 로드 시 자동 초기화 클래스 언로드 시
지역 변수 메서드 호출 시 메서드 종료 시
객체 객체 생성 시 GC(가비지 컬렉션)에 의해 소멸
인스턴스 변수 객체 생성 시 자동 초기화 객체 소멸 시
  • static 변수는 클래스 로드 시 메모리에 할당되어 모든 객체가 공유한다.
  • 인스턴스 변수는 객체가 생성될 때마다 고유한 값으로 초기화된다.
    • 기본자료형은 0, 0.0, false, '\u0000' 참조형은 null값으로 자동초기화됨

4. static 키워드

  • static은 객체와 관계없이 클래스 단위로 동작하는 변수와 메서드를 정의한다.
  • static 변수는 클래스가 메모리에 로드될 때 한 번만 생성되고 모든 객체가 이를 공유한다.
  • static 메서드는 객체를 생성하지 않고도 호출할 수 있으며, this를 사용할 수 없다.

static 예시:

class Counter {
    static int count = 0; // static 변수

    Counter() {
        count++;
    }
    
    static void displayCount() {
        System.out.println("Count: " + count); // static 메서드
    }
}

 

5. final 키워드

  • final은 값을 변경할 수 없다는 의미를 갖는다.
    • final class: 상속 불가
    • final method: 오버라이드 불가
    • final variable: 값 변경 불가

예시:

final class FinalClass {
    // 상속 불가
}

class Example {
    final int MAX_VALUE = 100; // 값 변경 불가
}

 

 

6. 패키지 (Package)

  • 패키지는 클래스의 이름 충돌을 피하기 위해 사용된다.
  • 패키지 선언을 통해 클래스가 속한 그룹을 정의하고, import를 통해 외부 패키지 클래스를 사용할 수 있다.

패키지 사용 예시:

package com.example.utility;

public class MathUtil {
    public static int add(int a, int b) {
        return a + b;
    }
}

 

 

7. 접근 제어자 (Access Modifiers)

  • 접근 제어자는 클래스, 멤버 변수, 메서드, 생성자의 접근 범위를 제어한다.
    • public: 어디서나 접근 가능
    • private: 클래스 내부에서만 접근 가능
    • protected: 동일 패키지 및 상속받은 클래스에서 접근 가능
    • default (지정하지 않으면): 동일 패키지 내에서만 접근 가능

예시:

class Person {
    public String name; // 누구나 접근 가능
    private int age; // 클래스 내부에서만 접근 가능
}

 

 

'Language > Java' 카테고리의 다른 글

[JAVA] SOLID 원칙  (0) 2025.05.04
[JAVA] 상속  (0) 2025.05.04
[JAVA] 변수 위치 및 메모리 구조  (0) 2025.05.04
[JAVA] JVM  (0) 2025.05.04
점프 투 자바 메모  (0) 2023.08.09