Java OOP 객체, 다형성

김민찬·2023년 7월 27일
0

Java Language

목록 보기
9/11

  1. 자바의 객체 지향 프로그래밍(OOP)

클래스(Class)와 객체(Object): 클래스는 객체를 생성하기 위한 틀로, 멤버 변수와 메서드들로 구성됩니다. 객체는 클래스의 인스턴스로 실제로 메모리에 할당된 것을 의미합니다.

캡슐화(Encapsulation): 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어 클래스 내부에 숨김으로써, 외부에서 직접 접근을 제한하고 안전성을 높입니다.

public class Car {
    private String make;
    private String model;
    private int year;

    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    // Getter 메서드들
    public String getMake() {
        return make;
    }

    public String getModel() {
        return model;
    }

    public int getYear() {
        return year;
    }

    // Setter 메서드들
    public void setMake(String make) {
        this.make = make;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public void setYear(int year) {
        this.year = year;
    }
}

상속(Inheritance): 클래스 간에 계층 구조를 형성하여 코드의 재사용성을 높이고, 공통 기능을 상위 클래스로부터 하위 클래스로 물려줍니다.

public class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 낸다.");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("야옹~");
    }

    public void scratch() {
        System.out.println("고양이가 발톱으로 긁는다.");
    }
}

다형성(Polymorphism): 다형성은 같은 이름의 메서드를 다양한 형태로 사용하는 능력을 의미합니다. 메서드 오버로딩과 메서드 오버라이딩을 통해 다형성을 구현할 수 있습니다.

public class MathOperations {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}
  1. 다형성(Polymorphism)

다형성은 객체 지향 프로그래밍의 중요한 특징 중 하나로, 하나의 인터페이스를 통해 여러 가지 타입의 객체를 다룰 수 있는 능력을 의미합니다. 다형성을 사용하면 동일한 인터페이스를 가진 객체들을 일관성 있게 다룰 수 있으며, 코드의 유연성과 재사용성을 높일 수 있습니다.

다형성은 두 가지 주요 방식으로 구현됩니다:

메서드 오버로딩(Method Overloading): 같은 이름의 메서드를 여러 개 정의하고, 인자의 개수나 타입이 다르게 하여 다양한 형태의 호출을 허용하는 것을 말합니다. 컴파일러는 메서드 오버로딩을 통해 인자에 따라 적절한 메서드를 호출합니다.

메서드 오버로딩의 특징

반환 타입은 메서드 오버로딩과 관련이 없습니다.
메서드 이름이 동일해야 합니다.
파라미터의 개수, 타입, 순서가 달라야 합니다.

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

메서드 오버라이딩(Method Overriding): 상위 클래스에서 정의된 메서드를 하위 클래스에서 동일한 시그니처로 재정의하는 것을 말합니다. 이때, 상위 클래스의 메서드는 숨겨지고, 하위 클래스의 메서드가 호출됩니다.

메서드 오버라이딩의 특징

상위 클래스에 있는 메서드와 동일한 시그니처(메서드 이름, 파라미터 타입, 개수, 순서)를 가져야 합니다.
접근 제어자(private를 제외한)와 반환 타입이 상위 클래스의 메서드와 동일하거나 그보다 넓은 범위로 변경할 수 있습니다.
@Override 어노테이션을 사용하여 오버라이딩을 명시적으로 표시할 수 있습니다.

public class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 낸다.");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("야옹~");
    }
}

상위 클래스에 있는 메서드와 동일한 시그니처(메서드 이름, 파라미터 타입, 개수, 순서)를 가져야 합니다.
접근 제어자(private를 제외한)와 반환 타입이 상위 클래스의 메서드와 동일하거나 그보다 넓은 범위로 변경할 수 있습니다.
@Override 어노테이션을 사용하여 오버라이딩을 명시적으로 표시할 수 있습니다.

0개의 댓글