Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

코딩 이래요래

Java의 클래스와 객체 본문

JAVA

Java의 클래스와 객체

강범호 2025. 3. 31. 01:39

📌 1. 필드(Field), 생성자(Constructor), 메소드(Method)

1-1. 인스턴스 변수와 클래스 변수

🔸 1) 필드(Field)

  • 객체의 상태나 데이터를 나타내는 변수를 필드라고 함.
  • 클래스 내부에 선언된 멤버 변수.

예시

class Person { 
    String name; int age; 
}
  • name과 age는 객체가 가지게 될 상태(속성)를 나타내는 필드임.

🔸 2) 인스턴스 변수 vs 클래스 변수

구분 정의 특징
인스턴스 변수
(Instance Variable)
객체가 생성될 때마다 별도로 생성 객체별로 독립적인 값을 가짐
클래스 변수
(Class Variable, static)
클래스가 메모리에 로드될 때 딱 한 번만 생성 모든 객체가 공유하는 변수

예시

class Test { 
    int number1; // 인스턴스 변수 
    static int number2; // 클래스 변수 
}

🔹 각 변수의 생성 및 소멸 시기

변수 생성 시기 소멸 시기
인스턴스 변수 객체(인스턴스) 생성 시 객체가 참조되지 않아 가비지컬렉터(GC)에 의해 메모리에서 제거될 때
클래스 변수 클래스 로드시 (프로그램 시작 시) 프로그램 종료 시
지역 변수 메소드 호출 시 메소드 종료 시

1-2. 생성자 패턴 (Constructor Patterns)

🔸 1) 기본 생성자

  • 파라미터가 없는 생성자.
  • 생성자를 작성하지 않으면 컴파일러가 자동으로 생성해줌.
    • 단, 하나라도 생성자를 작성하면 자동으로 기본 생성자를 만들어 주지 않음.

예시

class DefaultConstructor { 
    DefaultConstructor() { 
        System.out.println("기본 생성자 호출"); 
    } 
}

🔸 2) 오버로딩된 생성자

  • 매개변수의 타입이나 개수를 다르게 하여 여러 개 생성 가능.
  • 객체를 생성할 때 다양한 초기값을 줄 수 있음.

예시

class Person { 
    String name; 
    int age; 
    Person() { }
    
    Person(String name) { 
        this.name = name; 
    }
    
    Person(String name, int age) { 
        this.name = name; 
        this.age = age; 
    }
    
}

🔸 3) this() : 다른 생성자 호출

  • 클래스 내에서 다른 생성자를 호출할 때 사용.

예시

class Constructor { 
    int test; 
    
    Constructor() { 
        this(1); // 같은 클래스 내 다른 생성자 호출 
    } 
    
    Constructor(int num) { 
        this.test = num;
    } 
}

🔸 4) super() : 부모 클래스의 생성자 호출

  • 자식 클래스에서 부모 클래스의 생성자를 명시적으로 호출할 때 사용.
  • 명시하지 않으면 자식 클래스 생성자에서 기본적으로 자동 호출됨.

예시

class Parent { 
    Parent() { 
        System.out.println("부모 클래스 생성자 호출"); 
    } 
} 

class Child extends Parent { 
    Child() { 
        super(); // 생략 가능, 기본 생성자 자동 호출 
        System.out.println("자식 클래스 생성자 호출"); 
    } 
}

🔸 this, this(), super, super() 비교

키워드 역할 사용 위치
this 현재 객체 자기 자신을 참조할 때 클래스 내 어느 위치에서나 가능
this() 같은 클래스 내 다른 생성자 호출 생성자 내부 첫 줄에서만 호출 가능
super 부모 객체를 참조할 때 클래스 내 어느 위치에서나 가능
super() 부모 클래스 생성자 호출 생성자 내부 첫 줄에서만 호출 가능

1-3. 메소드 시그니처(Method Signature)와 오버로딩(Overloading)

🔸 1) 오버로딩(Overloading)

  • 동일한 클래스 내에서 같은 이름의 메소드나 생성자를 여러 개 정의할 수 있게 해주는 기법.
  • 매개변수의 타입, 개수, 순서 중 하나라도 다르면 다른 메소드로 인식함.

예시

class Calculator { 
    int sum(int a, int b) { 
        return a + b; 
    }
    
    double sum(double a, double b) { 
        return a + b; 
    }
    
    int sum(int a, int b, int c) { 
        return a + b + c; 
    }
}

🔸 2) 메소드 시그니처 구성요소

메소드 시그니처는 다음 요소들로 구성됨.

  • 메소드 이름
  • 매개변수의 개수, 타입, 순서

※ 리턴 타입은 메소드 시그니처에 포함되지 않음.


🔸 3) 매개변수로 사용 가능한 자료형

  • 기본 자료형 (int, char, boolean 등)
  • 참조 자료형 (String, 사용자 정의 클래스 등)
  • 배열 (int[], String[] 등)
  • 가변 인자(varargs) (int..., String...)

가변인자 예시

class VarargsTest { 
    void displayNumbers(int... nums) { 
        for (int num : nums) { 
            System.out.println(num); 
        } 
    } 
} 

// 사용법 new VarargsTest().displayNumbers(1, 2, 3, 4);

 


해당 게시글은 학습한 내용을 복습하며 정리한 글이므로 틀린 부분이 있을 수 있음.

'JAVA' 카테고리의 다른 글

자료구조  (0) 2025.04.13
SOLID 원칙  (0) 2025.04.07
객체지향 프로그래밍(OOP)의 4가지  (0) 2025.04.01
JVM의 메모리 구조  (0) 2025.03.31
객체지향 프로그래밍  (0) 2025.03.31