※ 이 글은 자바의정석을 참조하였다.
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: 프로젝트 아키텍처에 맞는 설계 패턴 선택 기준 수립 필요