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 |