Java

[Java] 클래스 class

junga 2022. 9. 6. 18:25

클래스에 대해 들어가기 전에 객체지향에 대한 이해를 먼저 해야한다!

객체 지향 프로그래밍(OOP, Object-Oriented Programming)


  • 모든 데이터를 객체로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 된다.
  • 이러한 객체의 상태와 행동을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그램이다.
  • 이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 한다.


클래스(class)


  • 클래스를 가지고 여러 객체를 생성하여 사용하게 된다.
  • 객체의 상태를 나타내는 변수(또는 필드)와 객체의 기능을 나타내는 메소드로 구성된다.


인스턴스(instance)


  • 클래스에서 객체를 생성하는 것을 인스턴스화라고 한다.
  • 그리고 그 클래스에서 생성된 객체는 인스턴스라고 부른다.
  • 즉, 메모리에 할당된 객체를 의미한다.

그럼 객체와 인스턴스 차이가 뭐야?

  • 객체는 생성된 모든 인스턴스를 대표하는 포괄적인 의미로 보면 되겠다.


메서드(method)


  • 데이터를 다루는 기능

Dog 클래스를 만들어보자

// 클래스명: Dog
// 특성: 이름, 나이, 무게
// 기능: 정보 출력

class Dog {
    // 필드
    String name;
    int age;
    Double weight;


    // 메소드
    public void printInfo() {
        System.out.println("name : " + name);
        System.out.println("age : " + age);
        System.out.println("weight : " + weight);
    }    
}



public class Main {
    public static void main(String args[]) {
        // 인스턴스 생성
        // 클래스이름 객체참조변수이름 = new 클래스이름();
        Dog dog1 = new Dog();

        dog1.name = "도도";
        dog1.age = 5;
        dog1.weight = 3.5;

        // 메소드 호출
        dog1.printInfo();

        // name : 도도
        // age : 5
        // weight : 3.5  
    }
}

dog1.name 등 인스턴스 변수를 하나 하나 초기화하기 번거롭다..
생성자 메소드를 통해 인스턴스 변수를 간단하게 초기화해보자!



생성자(Constructor)


  • 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있다.
  • 생성자의 이름은 해당 클래스의 이름과 같아야 한다.
  • 생성자는 반환값이 없지만, 반환 타입을 void로 선언하지 않는다.
  • 자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.
  • 생성자 정의가 따로 없어도 컴파일 시 자동으로 기본 생성자를 추가한다.
    ex) 위에 Dog 클래스
class Dog {
    String name;
    int age;
    Double weight;

    // 생성자 메소드 정의
    // this는 무엇? -> 인스턴스가 바로 자기 자신을 참조하는데 사용하는 변수이다.
    Dog(String name, int age, Double weight){
        this.name = name;
        this.age = age;
        this.weight = weight;
    }

    public void printInfo() {
        System.out.println("name = " + name);
        System.out.println("age = " + age);
        System.out.println("weight = " + weight);
    }
}


public class Main {
    public static void main(String args[]) {
        // 객체 생성과 동시에 인스턴스 변수 초기화
        Dog dog1 = new Dog("도도", 5, 3.5);
        dog1.printInfo();
    }
}