객체지향과 Java

Computer Science/Java

객체지향(Object-Oriented Programming)이란?

객체지향은 상태와 행동을 묶은 객체들이 메시지를 주고받으며 협력하게 설계하는 방법이다. 이렇게 작성하면 하나도 와닿지 않으니... 핵심 개념에 대해서 알아보자.

 

1. 캡슐화(Encapsulation)

  • 상태는 감추고, 행동으로만 조작하게 한다. 외부에서 상태를 직접 접근하지 못하도록 숨기는 것

2. 추상화(Abstraction)

  • 복잡한 구현은 감추고 ‘무엇을 하는지’에 초점을 둔다. 객체가 갖는 공통 특성을 뽑아내어 인터페이스/추상 클래스로 표현
  • 사용자는 필요한 기능만 이해하면 되고, 내부 구현은 몰라도 됨 -> 역할과 구현을 분리할 수 있다.
  • 요즘엔 구성(Composition)으로 변경되는 추세라고 한다!

3. 상속(Inheritance)

  • 기존 클래스(부모)의 특성과 기능을 새로운 클래스(자식)가 물려받는 것
  • 코드 재사용이 가능해지고 공통 기능을 상위 클래스에 정의하여 중복을 줄일 수 있다.

4. 다형성(Polymorphism)

  • 같은 이름의 메서드가 클래스에 따라 다른 방식으로 동작하는 것
  • 하나의 형태가 다른 방식으로 동작 할 수 있다.

 

그리고 이런 객체지향을 더 잘 설계할 수 있도록 하는 원칙이 SOLID 원칙이다.

1. 단일 책임 원칙 (Single Responsibility Principle)

  • 클래스는 하나의 일만 해야 한다.
  • 하나의 클래스가 여러 책임을 가지면, 수정할 이유가 여러 개 생기고 유지보수가 어려워진다.

2. 개방-폐쇄 원칙 (Open-Closed Principle)

  • 기존 코드를 수정하지 않고 새로운 기능을 확장할 수 있어야 한다.

3. 리스코프 치환 원칙 (Liskov Substitution Principle)

  • 부모 타입으로 선언된 객체는 언제든 자식 객체로 교체될 수 있어야 한다.
  • 자식이 부모의 계약을 약화/변질시키면 안 된다.

4. 인터페이스 분리 원칙 (Interface Segregation Principle)

  • 하나의 거대한 인터페이스보다는 여러 개의 구체적인 인터페이스로 분리하라.
  • 클라이언트가 쓰지 않는 메서드에 끌려다니지 않게

5. 의존 역전 원칙 (Dependency Inversion Principle)

  • “구체적인 클래스”가 아닌 “추상화된 인터페이스”에 의존해야 한다.
  • 고수준 모듈(도메인)이 저수준 구현(외부 API, DB)에 직접 의존하지 말고, 포트(추상)에 의존.

 

StackOverflow에 OOP의 핵심 개념과 SOLID 원칙에 대해서 설명하는 글을 가져왔다.

the answer is simple:

  • languages or concepts which don't support Encapsulation, Abstraction, Inheritance and Poly are not object oriented. If you do something object oriented you can always apply these OO basics, because they are available. One doesn't call such things principles.
  • SOLID in return is optional. When developing an OO design you should strive to be SOLID, by applying the underlying basics. Solid only determines how "good" your design is, not if it is object oriented or not. They are principles.

객체 지향적으로 개발하고자 한다면, 객체 지향의 기본 개념인 캡슐화, 추상화, 상속, 다형성을 반드시 따라야 한다. 그것들은 객체 지향에서 필수 요소이기 때문이다.

반면, SOLID 원칙은 선택사항이다. 그러나 보다 나은 설계를 만들기 위해, 유연한 코드를 작성하기 위해, 반드시 깊이 고민하고 반영해야 할 원칙이다.

 

이렇게 객체지향이 무엇인지 간단하게 알아보았다. 객체지향은 유지보수하기 편하고 안전하고 예측 가능하게 만들어준다는 것을 알 수 있다.

 

Java에서 객체지향

그럼 대표적인 객체지향 언어인 Java를 살펴보자.

Java는 위에서 언급한 객체지향의 핵심 개념인 캡슐화, 추상화, 상속(구성), 다형성을 모두 지원한다.

1. 캡슐화

  • 클래스(객체)의 필드를 접근제어자로 캡슐화
  • java 16부터 추가된 불변 객체인 record 클래스

2. 추상화

  • 추상 클래스 (abstract 키워드)
  • 인터페이스

3. 상속(구성)

  • extends: 상속 (단일 상속만 가능)
  • implement: 인터페이스 구현 (여러 인터페이스를 구현함으로 다중 상속을 구현)

4. 다형성

  • 동적 디스패치: 참조 타입이 아닌 실제 객체 타입의 @Override가 실행
  • finalm static, private는 오버라이드 대상이 아님

 

참고

https://stackoverflow.com/questions/26465627/difference-between-oop-basics-vs-solid

 

Difference between OOP basics vs SOLID?

I know of OOP (Object oriented programming) and SOLID. OOP basics Encapsulation Abstraction Inheritance Polymorphism and SOLID Single Responsibility Principle Open / Closed Principle Liskov

stackoverflow.com

 

'Computer Science > Java' 카테고리의 다른 글

Java의 값 복사와 JVM 구조  (0) 2025.10.13
Java 21 Virtual Thread  (0) 2025.09.25
Gradle 알아보기  (0) 2025.09.13
'Computer Science/Java' 카테고리의 다른 글
  • Java의 값 복사와 JVM 구조
  • Java 21 Virtual Thread
  • Gradle 알아보기
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (68)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (14)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (3)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    x64dbg
    PE header
    15973
    프로그래머스
    Lena tutorial
    DP
    12033
    dreamhack.io
    13265
    자료구조
    레나 튜토리얼
    Header
    9421
    Spring boot
    소수상근수
    리버싱 핵심원리
    n^2 배열 자르기
    Reversing
    DB
    19622
    리버싱
    백준
    2539
    servlet
    16946
    n+1
    HTTP
    bean
    서버 증설 횟수
    21278
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
객체지향과 Java
상단으로

티스토리툴바