※ 이 글은 자바의정석을 참조하였다.

1. 객체지향 언어의 특징

  • 기존의 프로그래밍언어와 크게 다르지 않다.
  • 코드의 재사용성이 높다.
  • 코드의 관리가 쉬워졌다.
  • 신뢰성이 높은 프로그램 개발이 가능하게 한다.

2. 클래스와 객체의 정의와 용도

  • 클래스의 정의 - 클래스란 객체를 정의 해 놓은것
  • 클래스의 용도 - 클래스는 객체를 생성하는데 사용
  • 객체의 정의 - 실제로 존재하는 것
  • 객체의 용도 - 객체의 속성과 기능에 따라 다름

3. 객체와 인스턴스

  • 객체 ≒ 인스턴스
  • 객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미
    인스턴스화 : 클래스로부터 인스턴스를 생성하는 것

4. 객체의 구성요소

  • 객체는 속성과 기능으로 이루어져 있다.
  • 속성은 변수로, 기능은 메서드로 정의 한다.

5. 인스턴스의 생성

  • 인스턴스의 생성방법
    클래스명 참조변수명; // 객체를 다루기 위한 참조변수 선언
    참조변수명 = new 클래스명(); // 객체생성 후, 생성된 객체의 주소를 참조변수에 저장
    Tv u = new Tv();

  • 인스턴스의 특징 (a) 하나의 인스턴르를 여러개의 참조 변수가 가르키는 경우 OK
    (b) 여러개의 인스턴스를 하나의 참조변수가 가르키는 경우 X


6. 현재(2026) 기준 참고 사항

객체지향 설계 5대 원칙 (SOLID)

  • Single Responsibility: 단일 책임 원칙 - 한 클래스는 하나의 책임만
  • Open/Closed: 개방/폐쇄 원칙 - 확장에 열려있고 수정에 닫혀있어야
  • Liskov Substitution: 리스코프 치환 원칙 - 하위 타입은 상위 타입을 대체 가능해야
  • Interface Segregation: 인터페이스 분리 원칙 - 클라이언트는 사용하지 않는 메서드에 의존하지 않아야
  • Dependency Inversion: 의존 역전 원칙 - 구체가 아닌 추상에 의존해야

최신 Java 기능과 OOP

// Record (Java 14+): 불변 데이터 클래스
public record User(Long id, String name, String email) {}

// Sealed Class (Java 17+): 상속 제한
public sealed class Shape permits Circle, Rectangle {}

// Pattern Matching (Java 21+)
if (obj instanceof User(var id, var name, var email)) {
  System.out.println(name);
}

OOP vs 함수형 프로그래밍

  • OOP: 상태(객체)와 행위(메서드) 중심, 캡슐화/상속/다형성
  • FP: 불변성과 함수 조합 중심, Stream API/람다
  • 현대 Java: 두 패러다임의 장점을 혼합해 사용 권장
  • TODO: 프로젝트 아키텍처에 맞는 설계 패턴 선택 기준 수립 필요
chanhee.kim's profile image

chanhee.kim

2017-12-20 09:10

Read more posts by this author