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

hyunnzl·2025년 4월 5일

자바

목록 보기
3/8
post-thumbnail

객체지향 프로그래밍의 특징

  • 캡슐화 : 데이터 보호 및 외부 접근 제한 (private, getter/setter)
  • 상속 : 기존 클래스를 확장하여 재사용 (extends)
  • 다형성 : 같은 타입으로 다양한 동작 (오버라이딩, 오버로딩)
  • 추상화 : 공통적인 특성만 뽑아내어 구현을 감춤 (abstract, interface)





캡슐화(Encapsulation)

데이터(필드)와 기능(메서드)을 하나의 클래스 안에 묶고, 외부에서 접근하지 못하도록 제한하는 것

  • 내부 구현은 숨기고(public/private/protected) 필요한 부분만 외부에 공개 (getter/setter)
  • 코드의 보안성과 유지보수성 향상
  • 예시
public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • 접근제어자 사용이 핵심 -> private, public





상속 (Inheritance)

부모 클래스의 속성과 기능을 자식 클래스가 물려받는 것

  • 코드 재사용성 증가
  • extends 키워드를 사용
  • 다중 상속은 허용되지 않음 (하지만 인터페이스로는 다중 구현 가능)
  • 예시
class Animal {
    void sound() {
        System.out.println("소리를 냅니다.");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("멍멍!");
    }
}





다형성 (Polymorphism)

하나의 객체가 여러 형태를 가질 수 있는 성질

  • 부모 타입의 참조 변수로 자식 객체를 참조 가능
  • 오버라이딩(재정의)과 오버로딩(중복정의)
  • 예시
class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

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

public class Main {
    public static void main(String[] args) {
        Animal a = new Cat(); // 다형성
        a.sound(); // 실행 결과: 야옹~
    }
}
  • 실행 시간에 어떤 메서드가 호출될지는 객체의 실제 타입에 따라 결정됨





추상화 (Abstraction)

공통된 특징을 뽑아내어 불필요한 구현은 숨기고 필요한 것만 표현

  • abstract class 또는 interface를 사용
  • 내부 로직을 몰라도 인터페이스만 보고 사용 가능하게 만듦
  • 예시
abstract class Shape { // abstract class
    abstract void draw();
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("원을 그립니다.");
    }
}
interface Drawable { // interface
    void draw();
}

0개의 댓글