클래스의 구성요소
- 클래스는 멤버로 필드와 메서드, 생성자를 가짐
class Car {
private string modelName;
private int modelYear;
Car(string modelName, int modelYear) {
this.modelName = modelName;
this.modelYear = modelYear;
}
public string getModel() {
return this.modelYear + ", " + this.modelName;
}
}
Car sonata = new Car("Sonata", 2024);
System.out.println(sonata.getModel());
- 클래스에서 필드는 클래스에 포함된 변수를 의미하며 선언된 위치에 따라 클래스 변수, 인스턴스 변수, 지역 변수로 구분됨
- 메서드는 클래스 내부에서 특정 작업을 수행하기 위한 명령문의 집합을 의미함
- 생성자는 객체의 생성시에 인스턴스를 초기화해주는 메서드를 의미함
메서드
- 메서드는 클래스에서 반복적인 프로그래밍을 피하기 위해 사용됨
- 메서드를 사용하면 코드의 가독성이 향상되며, 기능변경이나 문제가 발생했을 때 유지보수에 이점을 가지고 있음
- 클래스 내부에서 함수를 작성하듯이 작성하면 되지만, 접근 범위에 따라 앞에 접근 제어자를 작성하게 됨
class Car {
private int currentSpeed;
private int accelerationTime;
...
① public void accelerate(int speed, int second) {
System.out.println("speed: " + speed + ", second: " + second);
}
...
}
- 메소드 호출시에는 참조 연산자를 사용해 메소드를 호출함
Car myCar = new Car();
myCar.accelerate(60, 3);
생성자
- 클래스를 가지고 객체를 생성하면 인스턴스 값은 배열의 기본값과 동일한 값으로 자동으로 초기화 됨
- 하지만 직접 특정한 값으로 초기화 하고 싶은 경우, 초기화를 위한 메서드인 생성자를 사용해야 함
- 생성자의 이름은 해당 클래스의 이름과 동일해야 하며, 데이터를 전달받아 내부의 인스턴스를 초기화하게 됨
필요하다면 생성자도 오버로딩이 가능
Car(string modelName, int modelYear, string color, int maxSpeeds) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
Car porterEV = new Car("Porter", 2024, "white", 120);
- 만약 생성자를 정의하지 않으면 빈 메서드로 이루어진 기본 생성자를 자동으로 생성함
생성자를 정의한 경우 기본 생성자는 새성되지 않음
this
- 클래스 자기자신을 참조할 때에는 this 변수를 사용함
- this는 인스턴스 메서드에서만 사용 가능하며, static 메서드에서는 사용 불가능함
- 생성자 내부에서 다른 생성자를 호출하는 경우에는 this()를 사용해 생성자를 호출 가능함
단, 반드시 해당 생성자의 첫줄에서 호출해야 함
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
Car() {
this("소나타", 2012, "검정색", 160);
}
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
메서드 오버로딩
- 같은 이름의 메서드를 메서드 시그니처를 다르게 하여 중복으로 정의하는 것을 메서드 오버로딩 이라 함
class Test {
static void display(int num1) { System.out.println(num1); }
static void display(int num1, int num2) { System.out.println(num1 * num2); }
static void display(int num1, double num2) { System.out.println(num1 + num2); }
}
public class Method06 {
public static void main(String[] args) {
Test.display(10);
Test.display(10, 20);
Test.display(10, 3.14);
Test.display(10, 'a');
}
}
재귀 호출
- 메서드 내부에 메서드를 정의해 재귀 호출 할 수 있음
int recursiveSum(int n) {
if (n == 1) {
return 1;
}
return n + recursiveSum(n-1);
}
출처:
http://www.tcpschool.com/java/java_class_component