본문 바로가기

JAVA

클래스(Class) 와 객체(Object)

1. 클래스(Class)와 객체(Object)

 

1-1. 객체(Object)

      Java의 클래스를 이해하기 위해서는 객체를 먼저 이해할 필요가 있다.

      객체는 실제 세계에서 유형 또는 무형으로 존재하는 식별 가능한 모든 것을 의미한다.

      예를 들어 유형으로는 사람, 컴퓨터, 고양이 등이 존재할 수 있고, 무형으로는 생산, 운동, 운전 등이 존재할 수 있다. 

 

1-2. 클래스(Class)

       클래스는 실제 세계에 존재하는 객체를 Java 프로그램에서 구현하고자 만든 일종의 설계도이다.

       클래스는 필드(Field), 생성자(Constructor), 메서드(Method)로 구성되어 있으며, 이는 생략될 수 있다.

       👉 필드(Field) : 객체를 구성하는 속성이며, 데이터가 저장되는 공간이다. 멤버 변수라고도 부른다.

       👉 생성자(Constructor) : 변수를 초기화 하듯, 객체가 생성될 때 초기화를 해주기 위한 담당

       👉 메서드(Method) : 객체의 동작 부분을 담당하며, 정의된 기능을 수행할 수 있다.

       고양이라는 객체를 구현하고자 하는 클래스를 구성하자면 다음과 같이 할 수 있다.

public class Cat{

	// 필드(Field)
	String name;
    int age;
    String species;
    
    // 생성자(Construtor)
    Cat(String name, int age, String species) {
    	this.name = name;
        this.age = age;
        this.species = species;
    }
    
    // 메서드(Method)
    void eat() {
    	System.out.println("yamy");
    }
    
    void sleep() {
    	System.out.println("zzz");
    }
}

        클래스를 정의하기 위해서 class 키워드를 사용하여 생성하며,

        각 클래스는 접근 제어자를 통하여 해당 클래스로의 접근 가능한 범위를 제한할 수 있다. 

 

        ✍️ 접근 제어자

  클래스 내부 동일 패키지 하위 클래스 그 외 영역
public  가능 가능 가능 가능
protected 가능 가능 가능 불가능
default 가능  가능 불가능 불가능
private 가능 불가능 불가능 불가능

              접근 제어자는 클래스 이외에도 필드, 메서드 등에도 사용할 수 있으며,

              별도로 지정하지 않으면 default 값이 지정된다.

 

1-3. 인스턴스(Instance)

        프로그램 실행 시 선언이 완료된 클래스는 JVM 메모리 영역에 로드된다.

        이렇게 로드된 클래스를 사용하여 힙 영역에 객체를 생성할 수 있게 된다.

        이러한 과정을 '클래스의 인스턴스화'라고 한다.

        🖍 편의상 인스턴스와 객체가 혼용되어 사용되는 경우가 있다.

        인스턴스는 new 연산자를 통해 생성이 가능하며, 힙 영역에 인스턴스를 저장하며 그 주소값을 변수에 반환한다.

public static void main(String[] args) {
	// 인스턴스(객체) 생성
    // 클래스명 변수명 = new 클래스명(생성자)
    Cat cat1 = new Cat();
    
    // 메서드 사용
    cat1.eat();
}

     

        ✍️ 생성자 정의

               변수 선언 시에 초기화가 필요한 것처럼 인스턴스를 생성할 때에도 초기화가 필요한데

               인스턴스의 초기화는 생성자가 수행하게 된다.

               🔹 기본 생성자 

                     클래스 내부에 생성자를 별도로 생성하지 않는 경우 컴파일러에 의하여 자동으로 추가되는 생성자이다.

               🔹 묵시적 생성자

                     인스턴스 생성 시에 파라미터 값을 받지 않는 생성자이다.

               🔹 명시적 생성자

                     인스턴스 생성 시에 지정한 파라미터 값을 받는 생성자이다.

                🖍 명시적 생성자를 선언하면 컴파일러는 클래스에 이미 생성자가 있다고 판단하기 때문에

                      기본 생성자, 즉 묵시적 생성자를 생성하지 않는다. 

                      묵시적 생성자를 함께 사용하기 위해서는 명시적 생성자와 함께 선언해 주어야 한다.

// 묵시적 생성자
Cat() {}

// 명시적 생성자
Cat(String name, int age, String species) {
	this.name = name;
    this.age = age;
    this.species = species;
}

        ✍️ this 키워드와 this()

Cat(String name, int age, String speciese) {
	this.name = name; // 인스턴스변수 = 매개변수
    this.age = age;
    this.speciese = speciese;
}

              명시적 생성자에서 this 키워드는 인스턴스화 되었을 때 자신을 나타내어, 매개변수와 구별하기 위하여 사용된다.

              즉 this.name 은 인스턴스 변수인 것이고, name 은 매개변수로 들어온 지역변수를 가리킨다.

              this() 는 같은 클래스 내의 다른 생성자를 호출할 때 사용하는 것으로 this 키워드와 용도가 전혀 다르다.

Cat() {
	this("nabi", 2, "치즈냥"); // this()
}

Cat(String name, int age, String speciese) {
	this.name = name;
    this.age = age;
    this.speciese = speciese;
}

              이렇게 위의 생성자를 호출하게 되면 this() 에 의하여 Car(String, int, String)을 호출 받아서 연결된다.

                          

 

 

 

'JAVA' 카테고리의 다른 글

객체 지향 4대 특성 : 다형성, 캡슐화  (0) 2022.08.22
객체 지향 4대 특성 : 추상화, 상속  (0) 2022.08.21
조건문과 반복문  (0) 2022.08.19
연산자  (0) 2022.08.18
변수(Variable)  (0) 2022.08.16