[JAVA] 객체 지향 프로그래밍 개념 정리 (OOP)

2025. 9. 19. 20:14·JAVA

Java 실습 과정 중 기본적인 문법에 대한 사용과 실습, 그리고 심화개념을 하나씩 정리하고 있다.

 

차주부터 진행할 객체 지향 프로그래밍을 중점으로 한 실습과제를 진행하기 전 객체지향 프로그래밍(Object Oriented Programming) 의 개념을 다시한번 정리하고 넘어가보고자 한다.

 

이전에 공부하며 정리했던 포스팅 글 

 

1. 객체 지향 프로그래밍(OOP)란?

  • 프로그램을 "데이터(속성)와 기능(동작)" 을 묶은 객체(Object) 단위로 나누어 설계하고 구현하는 방식
  • 직관적이고 확장/유지보수가 쉬운 것이 특징 
    > 쉽게 말해 객체들이 모여 상호 협력하면서 데이터를 처리하는 방식을 일컫음 (조각모음을 생각해보자..!)

 

2. 절차지향과 다른 점은 무엇인가?

  • 절차지향 : "함수(절차)" 중심 → 데이터를 처리하는 순서 / 로직 위주 -> 어떻게 할까? 의 개념
    ex) C언어
  • 객체지향 : "객체" 중심 → 데이터와 기능을 묶어서 독립적인 단위로 관리 -> 누가 할까? 의 개념
    ex) Java, Python, C++ ... 

 

3. OOP의 큰 특징은 무엇인가?

  • 추상화(Abstraction) / 캡슐화(Encapsulation) / 상속(Inheritance) / 다형성(Polymorphism)의 네가지로 볼 수 있다.

① 추상화 (Abstraction)

  • 복잡한 시스템에서 필요한 속성과 기능만 골라내어 표현
    예) 학생 객체 → (이름,나이,학번) 만 정의, 집 주소나 SNS 계정은 생략

  • 객체의 관련 속성 만 '표시' - 데이터 추상화 하고 불필요한 세부 정보는 '숨긴다' - 제어 추상화로 나뉘어짐

② 캡슐화 (Encapsulation)

  • 데이터와 기능을 하나의 객체로 묶고, 외부에서는 함부로 접근하지 못하게 보호
  • private / public 같은 접근제어자를 통해 정보 은닉 가능
    예) 자동차 내부 엔진 구조는 숨기고, 가속() 메서드만 공개

③ 상속 (Inheritance)

  • 기존 클래스(부모)의 속성과 기능을 자식 클래스가 물려받아 재사용
    예) 동물 → 강아지, 고양이 (공통 속성: 이름, 나이 / 각자 동작 : 짖기, 야옹하기)

④ 다형성 (Polymorphism)

  • 같은 이름의 메서드라도 상황에 따라 다르게 동작
  • 오버로딩(Overloading) : 같은 이름, 매개변수 다름
  • 오버라이딩(Overriding) : 부모 클래스 메서드를 자식 클래스에서 재정의

 

4. OOP의 기본 구성 요소

// 클래스(청사진)
public class Student {
    String name; // 속성
    int age;

    // 생성자
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드
    public void study() {
        System.out.println(name + "은(는) 공부 중입니다.");
    }
}

// 객체(실제 인스턴스)
public class Main {
    public static void main(String[] args) {
        Student s1 = new Student("지수", 20);
        s1.study(); // "지수은(는) 공부 중입니다." 출력
    }
}

 

평소에도 자주 습관처럼 썼지만 정리하자면 아래의 기본 개념임을 잊지 말자

  • 클래스(Class): 객체를 만들기 위한 설계도
  • 객체(Object): 설계도로 실제 생성된 실물
  • 인스턴스(Instance): 클래스 기반으로 메모리에 할당된 객체

 

5. OOP의 장점

  • 코드 재사용성이 높다 (상속, 클래스 분리)
  • 유지보수 편리 (객체 단위로 수정)
  • 직관적 모델링 (현실세계와 유사)
  • 확장성이 높다 (새로운 기능 추가 용이)

 

 

 

출처: https://inpa.tistory.com/entry/OOP-객체-지향-프로그래밍-개념과-추상화-설계의-이해 [Inpa Dev 👨‍💻:티스토리]

'JAVA' 카테고리의 다른 글

[JAVA] String.format에 대해 알아보기  (0) 2025.09.23
[JAVA] JAVA의 For문에 대해  (0) 2025.09.23
[JAVA] JSP vs Thymleaf 개념 더 알아보기  (0) 2025.09.19
[JAVA] Enum이란?  (0) 2025.09.18
[JAVA] 자바 개념 확장 - Generic, Lambda, Stream, Thread  (0) 2025.09.17
'JAVA' 카테고리의 다른 글
  • [JAVA] String.format에 대해 알아보기
  • [JAVA] JAVA의 For문에 대해
  • [JAVA] JSP vs Thymleaf 개념 더 알아보기
  • [JAVA] Enum이란?
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    String.format
    Java 문법기초
    algorithm
    다형성
    웹소켓
    JPA
    SpringSecurity
    git
    네트워크 기초
    객체지향
    Til
    Spriingboot
    WebSocket
    jsp
    실시간 데이터 처리
    HTML&CSS
    Spring
    객체지향프로그래밍
    Stomp
    BEAN
    백엔드 기초다지기
    백엔드 기초
    RestTemplate
    프로세스와 쓰레드
    thymleaf
    for문
    Github
    java
    MVC
    경합조건과 교착상태
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[JAVA] 객체 지향 프로그래밍 개념 정리 (OOP)
상단으로

티스토리툴바