티스토리 뷰

728x90
반응형

Class란?


  • 객체지향 프로그래밍에서 로직과 데이터를 묶어둔 하나의 단위를 클래스라고 하며 현실 세계의 사물을 표현하기 위한 일종의 틀이라고 할 수 있습니다.
  •  쉽게 표현하자면 비행기가 하나의 물건이고 이 비행기의 상태와 행동을 구체화하는 프로그래밍 방식이 객체지향 프로그래밍입니다.
  • 자바에서 클래스란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.
  • 클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메서드(method)로 구성됩니다.

 

인스턴스란?


  • 자바에서 클래스를 사용하기 위해서는 해당 클래스 타입의 객체(Object)를 선언해야 합니다.
  • 이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 합니다. 그리고 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스라고 합니다.
  • 하나의 클래스는 여러개의 인스턴스를 생성할 수 있습니다.
  • 여러개의 인스턴스는 독립된 메모리 공간에 자신만의 필드를 가질 수 있습니다.
  • 하나의 클래스로부터 파생된 인스턴스들은 해당 클래스의 메서드를 공유할 수 있습니다.

 

메서드란?


  • 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라고 할 수 있습니다.
  • 메서드를 활용하면 중복되는 코드를 방지하고 모듈화를 통해 코드의 가독성을 높일 수 있습니다. 또한 기능의 변경이 필요한 경우 하나의 메서드만 수정하면 되므로 유지보수에 용이합니다.
접근제어자 반환타입 메서드이름(매개변수) {
 // 로직
}

public int speed(int speed){
    return speed;
}

 

메서드 오버로딩


  • 반환 타입과 이름은 같게, 파라미터 유형과 갯수를 다르게 하여 사용할 수 있습니다.
  • static 메서드를 오버로딩할 수 있습니다.
  • 컴파일 시점에 동작합니다 -> 컴파일 타임 다형성
public class Car {

   int add(int x, int y){
       return x + y;
   }

    int add(Long x, Long y){
       return (int) (x + y);
   }
}

 

메서드 오버라이딩


  • 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용합니다.
  • static 메서드는 재정의 할 수 없습니다. (static 메서드는 컴파일 시점에 메모리영역에 할당되기 때문입니다.)
  • 런타임 시점에 동작합니다. -> 런타임 다형성
public class Car {
    private int speed;

    public void go() {
        System.out.println("전진합니다.");
    }

    public void back() {
        System.out.println("후진합니다.");
    }

    public int speed() {
        return speed;
    }
    
    public static void isStaticMethod(){
        System.out.println("static 메서드");
    }
}

public class SuperCar extends Car {

    @Override
    public void go() {
        System.out.println("슈퍼카는 전진합니다.");
    }

    @Override
    public void back() {
        System.out.println("슈퍼카는 후진합니다.");
    }

    @Override
    public int speed() {
        return 200;
    }
}

public class CarExample {
    public static void main(String[] args) {
        SuperCar superCar = new SuperCar();

        superCar.go(); // 슈퍼카는 전진합니다.
        superCar.back(); // 슈퍼카는 후진합니다.
        System.out.println(superCar.speed()); // 200
    }
}

 

생성자란?


  • 생성자는 new 키워드와 같이 사용되며 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당합니다.
  • 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되아야 할 작업을 위해서도 사용됩니다.
  • 생성자의 특징
    • 생성자는 반환값이 없지만 반환 타입을 void로 선언하지 않습니다.
    • 생성자는 초기화를 위한 데이터를 인수로 전달 받을 수 있습니다.
    • 하나의 클래스가 여러개의 생성자를 가질수 있습니다.(생성자 오버로딩)
    • 생성자는 클래스의 이름과 같아야 하므로 오버라이딩은 불가능합니다. 
  • 생성자의 종류
    • 기본 생성자 - 클래스 내부에 선언된 생성자가 없는 경우 객체 생성 시 컴파일러가 자동으로 추가해주는 생성자
    • 묵시적 생성자 - 파라미터 값을 가지지 않는 생성자
    • 명시적 생성자 - 파라미터 값을 가지는 생성자
public class Car {
    private String modelName;
    private String color;
    private int speed;

    // 기본 생성자
    // 기본 생성자를 따로 선언하지 않고 오버로딩된 생성자가 있는경우
    // 컴파일러가 따로 만들어 주지 않습니다.
    public Car() {}

    public Car(String modelName) {
        this.modelName = modelName;
    }

    public Car(String modelName, String color) {
        this.modelName = modelName;
        this.color = color;
    }

    public Car(String modelName, String color, int speed) {
        this.modelName = modelName;
        this.color = color;
        this.speed = speed;
    }
}

 

 

this 키워드란?


this 참조 변수

  • this 참조 변수는 인스턴스가 바로 자기 자신을 참조하는데 사용하는 변수입니다.
  • 사용 방법
    • 지역 변수와 이름이 같은 멤버 변수에 접근하는 경우
    • 인스턴스 자신의 주소를 반환하는 경우
    • 생성자에서 다른 생성자를 호츨하는 경우 -> this() 메서드
public class Car {
    private String modelName;

    // 멤버 변수에 접근하는 경우
    public Car(String modelName) {
        this.modelName = modelName;
    }
    
    // 자신의 주소를 반환하는 경우
    public Car getSelfReference(){
        return this;
    }
}

 

this() 메서드

  • this() 메서드는 생성자 내부에서만 사용할 수 있으며, 같은 클래스의 다른 생성자를 호출하는 경우 사용합니다.
  • this() 메서드에 매개변수를 전달하면 생성자 중에서 매개변수의 리스트가 일치하는 다른 생성자를 찾아 호출해줍니다.
  • 한 생성자에서 다른 생성자를 호출하는 경우 반드시 해당 생성자의 첫 줄에서만 호출할 수 있습니다.
public class Car {
    private String modelName;
    private String color;
    private int speed;

    // 기본 생성자
    public Car() {
        this("나도 타고 싶다 벤츠", "black");
    }

    public Car(String modelName) {
        this.modelName = modelName;
    }

    public Car(String modelName, String color) {
        this.modelName = modelName;
        this.color = color;
    }

    public Car(String modelName, String color, int speed) {
        this.modelName = modelName;
        this.color = color;
        this.speed = speed;
    }
    
    ...getter
}

public class CarExample {
    public static void main(String[] args) {
        Car car = new Car();

        System.out.println(car.getModelName()); // 나도 타고 싶다 벤츠
        System.out.println(car.getColor()); // black
    }
}
728x90
반응형