자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 갖게된다. 그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있다.
💎 목적
1. 중복되는 코드의 반복적인 프로그래밍을 피할 수 있다.
2. 모듈화로 인해 코드의 가독성도 좋아진다.
3. 손쉽게 유지보수를 할 수 있다.
💎 문법
- 접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부 }
1. 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시
2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시
3. 메소드 이름 : 메소드를 호출하기 위한 이름을 명시
4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시
5. 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합
💎 메소드 시그니처(method signature)란 메소드의 선언부에 명시되는 매개변수의 리스트를 가리킨다.
💎 문법
- 객체참조변수이름.메소드이름(); // 매개변수가 없는 메소드의 호출
- 객체참조변수이름.메소드이름(인수1, 인수2, ...); // 매개변수가 있는 메소드의 호출
예제)
class Car {
private int currentSpeed;
private int accelerationTime;
public void accelerate(int speed, int second) {
System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
}
}
public class Method01 {
public static void main(String[] args) {
Car myCar = new Car(); // 객체 생성
myCar.accelerate(60, 3); // 메소드 호출
}
}
// 출력) 3초간 속도를 시속 60(으)로 가속함!!
자바에서는 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자(constructor)라는 메소드를 제공한다.
💎 문법
- 클래스이름() { ... } // 매개변수가 없는 생성자 선언
- 클래스이름(인수1, 인수2, ...) { ... } // 매개변수가 있는 생성자 선언
💎 특징
- 생성자는 반환값이 없지만, 반환 타입을 void형으로 선언하지 않는다.
- 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
- 객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있다.
즉, 생성자도 하나의 메소드이므로, 메소드 오버로딩이 가능
예제)
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
// 생성자(constructor)
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
public class Method02 {
public static void main(String[] args) {
Car myCar = new Car("아반떼", 2016, "흰색", 200); // 생성자의 호출
System.out.println(myCar.getModel()); // 생성자에 의해 초기화되었는지를 확인함.
}
}
// 출력) 2016년식 아반떼 흰색
자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.
하지만 특별히 생성자를 정의하지 않고도 인스턴스를 생성할 수 있습니다.
이것은 자바 컴파일러가 기본 생성자(default constructor)라는 것을 기본적으로 제공해 주기 때문이다. 기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않는다.
this 참조 변수는 인스턴스가 바로 자기 자신을 참조하는 데 사용하는 변수이다.
이러한 this 참조 변수는 해당 인스턴스의 주소를 가리키고 있다.
예제
class Car {
private String modelName;
Car(String modelName) {
this.modelName = modelName;
}
...
}
💎 위의 예제처럼 생성자의 매개변수 이름과 인스턴스 변수의 이름이 같을 경우에는 인스턴스 변수 앞에 this 키워드를 붙여 구분해만 한다.
this() 메소드는 생성자 내부에서만 사용할 수 있으며, 같은 클래스의 다른 생성자를 호출할 때 사용
예제)
class Car {
private String modelName;
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
}
Car() {
this("소나타); // 다른 생성자를 호출함.
}
public String getModel() {
return this.modelName;
}
}
public class Method05 {
public static void main(String[] args) {
Car tcpCar = new Car(); System.out.println(tcpCar.getModel());
}
}
// 출력) 소나타
매개변수를 가지지 않는 두 번째 생성자는 내부에서 this() 메소드를 이용하여 첫 번째 생성자를 호출한다. 이렇게 내부적으로 다른 생성자를 호출하여 인스턴스 변수를 초기화할 수 있다.
💎 단, 한 생성자에서 다른 생성자를 호출할 때에는 반드시 해당 생성자의 첫 줄에서만 호출할 수 있다.
출처 : http://www.tcpschool.com/java/java_methodConstructor_method