Class[Java]

SnowCat·2023년 6월 1일
0

Java - Language

목록 보기
5/17
post-thumbnail

클래스의 구성요소

  • 클래스는 멤버로 필드와 메서드, 생성자를 가짐
class Car {
	// 필드
	private string modelName;
    private int modelYear;
    
    // 생성자
    Car(string modelName, int modelYear) {
    	this.modelName = modelName;
        this.modelYear = modelYear;
    }
    
    // 메서드
    // 만약 공개범위를 정해주지 않으면 default(같은 패키지 내부에서만 사용가능)로 정의됨
    public string getModel() {
    	return this.modelYear + ", " + this.modelName;
    }
}

Car sonata = new Car("Sonata", 2024);
System.out.println(sonata.getModel()); // Sonata, 2024
  • 클래스에서 필드는 클래스에 포함된 변수를 의미하며 선언된 위치에 따라 클래스 변수, 인스턴스 변수, 지역 변수로 구분됨
  • 메서드는 클래스 내부에서 특정 작업을 수행하기 위한 명령문의 집합을 의미함
  • 생성자는 객체의 생성시에 인스턴스를 초기화해주는 메서드를 의미함

메서드

  • 메서드는 클래스에서 반복적인 프로그래밍을 피하기 위해 사용됨
  • 메서드를 사용하면 코드의 가독성이 향상되며, 기능변경이나 문제가 발생했을 때 유지보수에 이점을 가지고 있음
  • 클래스 내부에서 함수를 작성하듯이 작성하면 되지만, 접근 범위에 따라 앞에 접근 제어자를 작성하게 됨
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); // speed: 60, second: 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); // 10
        Test.display(10, 20); // 200
        Test.display(10, 3.14); // 13.14
        Test.display(10, 'a'); // 970 (a = 97로 형변환)
    }
}

재귀 호출

  • 메서드 내부에 메서드를 정의해 재귀 호출 할 수 있음
int recursiveSum(int n) {
    if (n == 1) {
        return 1;
    }
    return n + recursiveSum(n-1);
}

출처:
http://www.tcpschool.com/java/java_class_component

profile
냐아아아아아아아아앙

0개의 댓글