본문 바로가기

IT 개발/JAVA

[Java기초] Java 클래스와 객체 지향 프로그래밍

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 현대 소프트웨어 개발에서 널리 사용되는 프로그래밍 패러다임 중 하나입니다. Java는 객체 지향 언어로, 클래스와 객체를 사용하여 프로그래밍 모델을 구현합니다. 이 글에서는 Java의 클래스와 객체 지향 프로그래밍에 대해 알아보겠습니다.

 

1. 객체 지향 프로그래밍 개요

객체 지향 프로그래밍은 개발과정에서 복잡한 문제를 해결하기 위해 객체라는 개념을 도입한 프로그래밍 패러다임입니다. 객체는 속성과 행동을 포함하는 대상으로, 프로그래밍에서 데이터와 기능을 하나로 묶어 구현합니다. 객체 지향 프로그래밍의 핵심 요소로는 클래스, 객체, 상속, 캡슐화, 다형성 등이 있습니다.

 

2. 클래스와 객체

Java에서 클래스는 객체를 생성하기 위한 템플릿으로, 속성과 메서드를 포함합니다. 속성은 클래스에 포함된 데이터를 나타내는 변수입니다. 메서드는 클래스에서 수행할 수 있는 연산이나 동작을 나타내는 함수입니다. 객체는 클래스를 사용하여 생성된 실체로, 객체마다 속성 값이나 상태가 다를 수 있습니다. 클래스 간에도 상속 관계를 가질 수 있어 코드의 재사용성을 높일 수 있습니다.

// 클래스 정의
class Vehicle {
  String color; // 속성 1
  int speed; // 속성 2

  // 메서드 1
  void start() {
    System.out.println("차량이 출발합니다.");
  }

  // 메서드 2
  void stop() {
    System.out.println("차량이 정지합니다.");
  }
}

public class Main {
  public static void main(String[] args) {
    // 객체 생성
    Vehicle car = new Vehicle();

    // 객체의 속성 값 설정
    car.color = "Blue";
    car.speed = 100;

    // 객체의 메서드 호출
    car.start();
    car.stop();
  }
}

 

 

3. 상속

상속을 통해 기존 클래스를 기반으로 새로운 클래스를 생성할 수 있습니다. 새로운 클래스는 상속받은 클래스의 속성과 메서드를 사용할 수 있으며, 추가적인 기능이나 변경된 동작을 구현할 수도 있습니다. 상속을 활용하면 중복 코드를 줄이고 유지 관리를 쉽게 할 수 있습니다.

// 슈퍼클래스
class Animal {
  String name;

  void makeSound() {
    System.out.println(name + " is making a sound.");
  }
}

// 서브클래스
class Dog extends Animal {
  // 메서드 오버라이딩
  @Override
  void makeSound() {
    System.out.println(name + " is barking.");
  }
}

public class Test {
  public static void main(String[] args) {
    Dog dog = new Dog();
    dog.name = "Rex";
    dog.makeSound(); // 서브클래스의 메서드 호출
  }
}

 

4. 캡슐화

캡슐화는 클래스로부터 객체를 생성할 때 객체의 내부 데이터를 외부로부터 보호하는 방법입니다. 클래스의 속성을 private으로 선언해 외부에서 직접 접근하지 못하게 하여 데이터의 무결성을 유지할 수 있습니다. 속성에 접근하려는 경우, 대신 getter 및 setter 메서드를 사용합니다.

class Smartphone {
  private int battery;

  // Setter 메서드
  public void setBattery(int battery) {
    if (battery < 0 || battery > 100) {
      System.err.println("Invalid battery level!");
      return;
    }
    this.battery = battery;
  }

  // Getter 메서드
  public int getBattery() {
    return battery;
  }
}

public class App {
  public static void main(String[] args) {
    Smartphone phone = new Smartphone();
    phone.setBattery(80); // 정상 값
    phone.setBattery(120); // 오류 값

    System.out.println("배터리 잔량: " + phone.getBattery() + "%");
  }
}

 

5. 다형성

다형성은 하나의 객체가 다양한 형태로 사용될 수 있는 기능입니다. Java에서는 인터페이스를 사용해 다형성을 구현할 수 있는데, 이를 통해 기능을 표준화하고 유연한 설계가 가능합니다.

// 인터페이스
interface Flyable {
  void fly();
}

// 드론 클래스
class Drone implements Flyable {
  @Override
  public void fly() {
    System.out.println("드론이 날아갑니다.");
  }
}

// 새 클래스
class Bird implements Flyable {
  @Override
  public void fly() {
    System.out.println("새가 날아갑니다.");
  }
}

public class App {
  public static void main(String[] args) {
    Flyable drone = new Drone();
    Flyable bird = new Bird();

    drone.fly();
    bird.fly();
  }
}

 

객체 지향 프로그래밍은 Java 프로그래밍에서 핵심적인 요소입니다. 이 글에서 설명한 클래스, 객체, 상속, 캡슐화, 다형성 등 객체 지향 개념의 이해 및 활용은 프로그램을 효율적으로 작성하고 관리하는 데 큰 도움을 줍니다. 이 가이드를 참고하여 객체 지향 프로그래밍의 지식을 확장하고, Java를 사용한 소프트웨어 개발 능력을 한 단계 업그레이드 해보시길 바랍니다.