Java (클래스,상속,인터페이스)

coldrice99·2024년 9월 3일
0

1. 객체지향 프로그래밍(OOP) 개념

객체지향 프로그래밍은 현실 세계의 사물과 개념을 소프트웨어로 구현하는 방법론이다. 객체는 속성(필드)과 행위(메서드)로 구성되며, 서로 상호작용할 수 있다. 객체는 물리적인 존재뿐만 아니라 개념적인 것들도 포함한다. 자바에서 이러한 객체들은 클래스로 설계되고, 객체 간의 상호작용은 메서드를 통해 이루어진다.

2. 클래스와 객체

클래스는 객체를 만들기 위한 설계도이다. 클래스를 정의할 때는 필드(속성), 생성자(객체 초기화), 메서드(행위)로 구성된다. 클래스 선언 이후에는 new 연산자를 사용해 객체를 생성하며, 이때 생성자가 호출되어 객체가 초기화된다.

예시: 자동차 클래스

public class Car {
    String company;   // 자동차 회사
    String model;     // 자동차 모델
    String color;     // 자동차 색상
    double price;     // 자동차 가격

    // 기본 생성자
    public Car() {}

    // 생성자 오버로딩
    public Car(String model, String color, double price) {
        this.model = model;
        this.color = color;
        this.price = price;
    }

    // 메서드 예시
    public void drive() {
        System.out.println("Driving...");
    }
}

3. 상속과 다형성

상속은 부모 클래스의 필드와 메서드를 자식 클래스가 물려받아 사용하는 기능이다. 상속을 통해 코드의 재사용성을 높일 수 있으며, 자식 클래스는 부모 클래스의 기능을 확장하거나 수정할 수 있다.

다형성

다형성은 동일한 메서드 이름이 다양한 클래스에서 다양한 기능을 수행할 수 있게 하는 원리이다. 예를 들어, Animal 클래스의 sound() 메서드를 Dog 클래스와 Cat 클래스에서 각각 다르게 구현할 수 있다.

public class Animal {
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

public class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Cat meows");
    }
}

4. 캡슐화와 접근 제어자

캡슐화는 객체의 속성(필드)와 행위(메서드)를 하나로 묶어 외부에서 객체 내부의 세부 내용을 알지 못하도록 하는 것을 의미한다. 이를 통해 객체의 무결성을 유지하고, 잘못된 데이터 접근을 방지할 수 있다.

접근 제어자

  • public: 모든 클래스에서 접근 가능
  • protected: 같은 패키지 내에서, 또는 자식 클래스에서 접근 가능
  • default(아무것도 지정하지 않은 경우): 같은 패키지 내에서만 접근 가능
  • private: 같은 클래스 내에서만 접근 가능

5. 생성자와 this 키워드

생성자는 객체가 생성될 때 호출되며, 객체의 초기화를 담당한다. 생성자 오버로딩을 통해 다양한 초기화 방법을 제공할 수 있다.

this 키워드

this는 현재 객체 자신의 참조를 나타내며, 주로 필드와 매개변수의 이름이 충돌할 때 사용된다. this()는 다른 생성자를 호출할 때 사용되며, 코드 중복을 줄이는 데 유용하다.

public class Car {
    String model;
    String color;
    double price;

    public Car(String model) {
        this(model, "Black", 50000000);  // 다른 생성자 호출
    }

    public Car(String model, String color, double price) {
        this.model = model;
        this.color = color;
        this.price = price;
    }
}

6. 인터페이스와 추상 클래스

인터페이스는 클래스가 구현해야 하는 메서드들을 정의한 것으로, 다중 상속을 지원한다. 추상 클래스는 일부 구현을 가지며, 자식 클래스가 반드시 구현해야 하는 추상 메서드를 포함한다.

  • 추상 클래스: 공통된 속성과 메서드를 가진 상위 클래스로, 일부 메서드는 구현되지 않고 자식 클래스에서 구현해야 한다.
  • 인터페이스: 클래스가 반드시 구현해야 할 메서드의 집합을 정의하며, 다중 구현이 가능하다.
public interface Drivable {
    void drive();
}

public abstract class Vehicle {
    abstract void startEngine();
}
profile
서두르지 않으나 쉬지 않고

0개의 댓글