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 |