BackEnd/Java
[Java] 객체지향 프로그래밍(Object-Oriented Programming, OOP)
ryuneng
2025. 1. 15. 00:06
반응형
# 목적
: 객체지향 프로그래밍(Object-Oriented Programming, OOP)에 대한 이해
객체지향 프로그래밍(OOP)이란?
- 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, ‘객체’들의 상호작용(메시지 주고받기, 데이터 처리 등)으로 프로그램 로직을 구성하는 프로그래밍 패러다임
- OOP의 핵심 개념
1. 캡슐화(Encapsulation)
2. 상속(Inheritance)
3. 추상화(Abstraction)
4. 다형성(Polymorphism)
객체(Object)란?
: 사전적인 정의로는, 실제로 존재하는 것. 사물 또는 개념
객체 지향 프로그래밍(OOP)에서의 객체란, 클래스가 실제로 구현된 인스턴스 .
즉, 클래스를 인스턴스화한 것
(쉽게 말하자면, 객체 = instance 변수 묶음)
객체의 용도
: 객체가 가지고 있는 기능과 속성에 따라 다름
클래스 | 객체(인스턴스) | 참조변수 |
---|---|---|
제품 설계도 | 제품 | |
TV 설계도 | TV | 리모컨 |
객체의 구성 요소
: 객체 = 속성(변수) + 기능(메서드)
속성 | 기능 |
---|---|
변수(field) | 메서드(method) |
크기, 길이, 높이, 색상, 볼륨, 채널 등 | 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경 등 |
ex) int volume; | ex) void volumeUp() { volume++; } |
📌 객체의 생성과 사용 순서
1. 클래스(설계도) 작성 (객체를 생성하기 위해)
ex) class Tv 클래스에 설계도 작성
2. 객체(제품) 생성 (객체를 사용하기 위해)
ex) class TvUsing의 main메서드에서 Tv t = new Tv(); 객체생성
3. 객체(제품) 사용 (객체가 가진 속성과 기능을 사용하기 위해)
ex) class TvUsing의 main메서드에서 t.channel = 7; || t.channelDown(); 등으로 사용
# 객체 생성 및 사용 예시
public class TvUsing {
public static void main(String[] args) {
// ------ 2. 객체 생성 ------
// (1) Tv클래스 타입의 '참조변수 t(리모컨)'를 선언
// (2) Tv인스턴스를 생성 (3) 생성된 Tv인스턴스의 주소를 대입 연산자를 통해 t에 저장
Tv t = new Tv(); // (1) Tv t; (3),(2) t = new Tv(); 를 한 문장으로
// 클래스명 변수명 = new 클래스명();
// ------ 3. 객체 사용 ------
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 저장 (변수 사용) // 값 : 7
t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출 (메서드 사용) // 값 : -1 (channelDown() : --channel)
System.out.println("현재 채널은 " + t.channel + " 입니다."); // t.channel 값 : 6
}
}
// ------ 1. 클래스 작성 ------
class Tv {
// Tv의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int channel; // 채널
// Tv의 기능(메서드)
void power() { power = !power; } // TV를 켜거나 끄는 기능을 하는 메서드
void channelUp() { ++channel; } // TV의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel; } // TV의 채널을 낮추는 기능을 하는 메서드
클래스 간의 관계
1. is a
- A is a B = A는 B다
- 상속관계 / 구현관계
2. has a
- A has a B = A가 B를 포함한다
- 포함관계 / 의존관계* 가장 일반적인 객체 간의 관계
상속과 구현
* 상속(extends)
- 자식클래스를 빠르게 구현하기 위해서 사용
- 유지보수성, 코드 재사용성이 높아짐
* 구현(implements)
- 사용방법이 동일한 구현클래스를 제작하기 위해서 사용
- 추후 변경될 가능성이 있는, 교체 가능해야 하는 것들은 구현해야 함
* 참고 : 유튜브 [자바의 정석 기초]
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Java-객체지향-OOP-기초정리