본문 바로가기

인프런 - 백엔드(김영한)/java

class / 객체

class

개발을 함에 있어, 어떠한 묶음의 자료를 정리해야 할때가 있다.

예를 들어 어떤 음악프로그램을 만드는데 있어서 (속성: 볼륨, on/off 상태, 기능: volumeUp, volumeDown, showStatus )와 같이 정리할 때이다.

 

이런경우 클래스라는 개념을 이용하면 효과적이다.

public class MusicPlayer{
  int volume = 0;
  boolean isOn = false;

  void on(){
    isOn = true;
    System.out.println("플레이어가 켜졌습니다.");
  }
  void off(){
    isOn = false;
    System.out.println("플레이어가 종료되었습니다.");
  }

  void volumeUp(){
    volume++;
    System.out.println("현재 볼륨: " + volume);
  }
  void volumeDown(){
    volume--;
    System.out.println("현재 볼륨: " + volume);
  }

  void showStatus(){
    System.out.println("현재 볼륨: "+ volume + " 입니다.");
  }
}

다음은 MusicPlayer class의 한 예시이다.

 

클래스가 만들어지면, main 함수에서 다음과 같은 방식으로 사용/접근 이 가능하다.

public class Main {
    public static void main(String[] args) {
        MusicPlayer player = new MusicPlayer();
        player.on();
        player.volumeUp();
        player.volumeUp();
        player.volumeDown();
        player.showStatus();
        player.off();
    }
}

다음과 같은 방식으로 개발함으로서 훨씬 직관적이고 효율적으로 개발을 할 수 있다. 

 

 

this

public class Main {
    public static void main(String[] args) {
    
        Person person = new Person("홍길동", 25);
        person.introduce();
    }
}

 

class Person {
    String name;
    int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void introduce() {
        System.out.println("이름: " + this.name);
        System.out.println("나이: " + this.age);
    }
}

다음 코드에서 볼 수 있듯이, 멤버변수와 매개변수의 이름이 같을때 this 를 사용한다.

일반적으로 멤버변수와 매개변수의 이름이 같은경우, 가까이 있는 변수를 사용하므로 다음 코드에서 this를 안붙였을 경우 모든 name 과 age는 매개변수를 참조하게 된다. 

따라서 멤버변수의 데이터를 참조하게 하기 위해서 this 를 통하여 대상을 지정해준다.

 

 

생성자(constructor)

생성자를 이용하면 객체를 생성하자마자 초기화 할수있다.

public class Person {
    String name;
    int age;

    // 생성자(Constructor)
    public Person(String name, int age, int grade) {
        this.name = name;
        this.age = age;
    }

    // 이름과 나이를 출력하는 메소드
    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}
public class Main {
    public static void main(String[] args) {
        // Person 객체 생성
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Bob", 30);

        // 객체 정보 출력
        person1.displayInfo();
        person2.displayInfo();
    }
}

 우선 생성자를 지정해주지 않는다면 java는 알아서 기본생성자를 자동으로 생성해준다.

하지만 내가 생성자를 지정해준다면 java는 기본 생성자를 자동으로 생성해 주지 않고,         

Person person3 = new Person(); 

다음과 같이 공백으로 선언했을때는 컴파일 오류를 만들어낸다.

 

 

생성자 오버로딩 / this()

public class Person {
    String name;
    int age;
    int grade;

    // 생성자(Constructor)
    Person(String name, int age, int grade) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
    // 생성자 오버로딩
    Person(String name, int age) {
        this.name = name;
        this.age = age;
        this.grade = 0;
    }
    //this() 사용
    Person(String name) {
        this(name, 0, 0);
    }

    // 이름과 나이를 출력하는 메소드
    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Grade: " + grade);

    }
}

다음과 같이 생성자를 오버로딩 해서 사용가능하며,

this()문을 사용하면 주변의 다른 생성자를 통해 생성되므로 코드를 더 간결하게 줄일 수 있다.

 

단 this 문은 사용 조건이 있는데 

무조건 그 해당 생성자의 첫번째 줄에 생성해야 한다.

 

'인프런 - 백엔드(김영한) > java' 카테고리의 다른 글

static / final  (0) 2024.10.25
접근 제어자  (4) 2024.10.17
배열  (0) 2024.10.08
형변환  (0) 2024.10.06
입력  (2) 2024.10.03