어떤 클래스던 모든 클래스는 인스턴스화 될 때 생성자를 사용하게 된다.
생성자에는 특징이 여러가지 있는데 그 부분을 잠시 보자면
1. 생성자는 리턴타입이 없다.
2. 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할 때 자동으로 생성된다.
3. 매개변수가 없는 생성자를 기본생성자 라고 한다.
4. 생성자를 하나라도 프로그래머가 만들었다면 기본생성자는 자동으로 만들어지지 않는다.
생성자는 객체가 될 때 필드를 초기화 하는 역할을 수행하며
자동차가 객체가 될 때 반드시 이름을 가지도록 하려면 Car클래스를 다음과 같이 만들어야한다.
public class Car{
String name;
int number;
public Car(String n){
name = n;
}
}
위의 코드와 연계로 Car 클래스를 이용해서 Car 인스턴스를 생성하는 방법은 아래와 같다.
public class CarExam2{
public static void main(String args[]){
Car c1 = new Car("경찰차");
Car c2 = new Car("화물차");
// Car c3 = new Car(); 라고 할시 컴파일 오류가 발생한다.
System.out.println(c1.name);
System.out.println(c2.name);
// Car클래스는 기본 생성자를 가지지 않기 때문에 기본생성자로 Car 객체를 생성할 수 없다.
this 키워드에 대해서 알아보려고 하는데 this는 현재 객체, 자기 자신을 나타낸다고 보면 된다.
public class Car{
String name;
int number;
public Car(String n){
name = n;
}
}
Car클래스의 생성자 매개변수의 이름이 n이며 n이라는 변수명은 뭘 의미하는지는 쉽게 알 수 없는데
n으로 쓰기 보다는 name으로 사용하는 것이 좋으며 이런식으로 변수명을 쉽게 알아보기 쉽게
지정을 해주는 것이 중요하다. (안그러면 정말 이게 뭔지 잘 모른다...)
public Car(String name){
name = name;
}
근데 이렇게 name=name 이라고 해버리면 가깝게 선언된 변수를 우선 사용하기 때문에
name=name 이라는 코드는 매개변수의 name 의 값을 매개변수 name에 대입하라는 의미가 되는데
필드는 바뀌지 않는다, 이런 경우에는 필드라는 것을 컴파일러와 JVM에게 알려주기 위해 this 키워드를 사용한다.
public Car(String name){
this.name = name;
}
위와 같이 this.name은 필드 name을 말하는거고 = 뒤에 name은 매개변수를 의미를 하게되며
매개변수의 값을 필드에 대입하라는 의미가 되며 우리가 볼 때에도 쉽게 이해할 수 있게 된다.
클래스 안에서 자기 자신이 가지고 있는 메소드를 사용할 때에도 this.메소드명()으로 호출 할 수 있다.
메소드 오버로딩에 대해서 알아보려고 하는데 메소드 오버로딩은 매개변수의 수, 타입이 다른 경우
동일한 이름으로 메소드를 여러개 정의할 수 있게 해주는 것을 뜻한다.
class MyClass2{
public int plus(int x, int y){
return x+y;
}
public int plus(int x, int y, int z){
return x + y + z;
}
public String plus(String x, String y){
return x + y;
}
}
메소드 오버로딩의 경우에는 매개변수 부분이 차이가 달라야 한다.
위의 코드는 이름은 같지만 매개변수가 다른 메소드 들이다.
매개변수 이름은 같아도 상관은 없지만 타입이 같으면 안된다.
'Java' 카테고리의 다른 글
| Java(자바) - 클래스 간 공유 (extends 의 활용 정리) (0) | 2022.08.23 |
|---|---|
| Java(자바) 생성자 오버로딩 및 this와 패키지 (0) | 2022.08.17 |
| Java(자바) String클래스의 메소드와 변수의 scope 및 static (0) | 2022.08.16 |
| 자바 수업 내용 간단 정리 (클래스 기능 및 사용법) (0) | 2022.08.16 |
| Java(자바) - 클래스에 대해서 알아보기(2) (0) | 2022.08.16 |
댓글