코딜기
[Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) 본문
반응형
객체(Object)란?
- 객체란 데이터와 그 데이터를 처리하는 함수들을 묶어놓은 하나의 독립적인 단위입니다.
- 객체를 사용하면 코드의 가독성이 좋아지고 유지보수가 편리해집니다.
- 또한 객체 지향 프로그래밍은 코드 재사용성이 높아지고 대규모 프로그램을 개발할 때 유용합니다.
객체를 사용하지 않았을 때의 비효율성
- 색깔, 품번, 가격의 속성을 가지고 있는 펜을 제작한다고 가정합니다.
- 빨간 펜, 파랑 펜, 검정 펜을 만들기 위해서는 아래와 같이 각각 변수명을 다르게 해서 만들어야 합니다.
//빨간 펜
int redPenPrice = 500;
String redPenColor = "빨강";
String redPenNo = "a001";
//파랑 펜
int bluePenPrice = 800;
String bluePenColor = "파랑";
String bluePenNo = "a002";
//검정 펜
int blackPenPrice = 1000;
String blackPenColor = "검정";
String blackPenNo = "a003";
- 또한 펜의 기능을 정의하고 싶을 때 각각 펜별로 기능을 정의해야 합니다.
void redPenWrite() {
System.out.println("빨간 펜으로 글씨를 씁니다.");
}
void redPenDraw() {
System.out.println("빨간 펜으로 그림을 그립니다.");
}
void redPenInfo() {
System.out.println("제품번호: " + redPenNo);
System.out.println(redPenColor + "색 펜의 가격은 " + redPenPrice + "원 입니다.");
}
void bluePenWrite() {
System.out.println("파랑 펜으로 글씨를 씁니다.");
}
void bluePenDraw() {
System.out.println("파랑 펜으로 그림을 그립니다.");
}
void bluePenInfo() {
System.out.println("제품번호: " + bluePenNo);
System.out.println(bluePenColor + "색 펜의 가격은 " + bluePenPrice + "원 입니다.");
}
void blackPenWrite() {
System.out.println("검정 펜으로 글씨를 씁니다.");
}
void blackPenDraw() {
System.out.println("검정 펜으로 그림을 그립니다.");
}
void blackPenInfo() {
System.out.println("제품번호: " + blackPenNo);
System.out.println(blackPenColor + "색 펜의 가격은 " + blackPenPrice + "원 입니다.");
}
이처럼 객체라는 개념을 사용하지 않는다면 같은 내용의 중복된 코드로 작성을 해야 합니다.
-> 이는 코드의 간결성과 가독성을 떨어뜨리고, 유지보수에 있어서 불편함을 야기합니다.
객체 사용
- 속성과 기능이 같은 펜을 여러 개 만들고 싶다면 미리 큰 틀을 정의해 두고, 이를 통해 여러 개의 펜을 빠르게 만들 수 있습니다.
- 이 큰 틀을 클래스라고 하고, 클래스를 사용해서 여러 개의 펜을 만들어보겠습니다.
- 객체 설계용 클래스는 메인 메서드를 작성하지 않습니다.
public class Pen {
// 객체의 속성을 필드(멤버변수)라고 부릅니다.
String color;
int price;
String productNo;
// 객체의 기능을 메서드라고 합니다.
void write() {
System.out.println(color + "색 글을 씁니다.");
}
void draw() {
System.out.println(color + "색 그림을 그립니다.");
}
void priceInfo() {
System.out.println("제품번호: " + productNo);
System.out.println(color + "색 펜의 가격은 " + price + "원 입니다.");
}
}
- 펜을 만들기 위해 main 메서드를 생성하고, 실제로 펜을 만들어보겠습니다.
public class Main {
public static void main(String[] args) {
// 객체 생성
// 클래스타입 변수명 = new 클래스이름();
Pen redPen = new Pen();
Pen bluePen = new Pen();
Pen blackPen = new Pen();
}
}
- 위와 같이 간단하게 3개의 펜을 만들었고, 이제 펜의 내용을 채워보겠습니다.
public class Main {
public static void main(String[] args) {
redPen.color = "빨간색";
redPen.price = 1000;
redPen.productId = 1;
bluePen.color = "파란색";
bluePen.price = 1500;
bluePen.productId = 2;
blackPen.color = "검정색";
blackPen.price = 1300;
blackPen.productId = 3;
}
}
- 이렇게 초기화까지 마쳤다면 완전한 펜이 완성되었습니다.
객체와 참조 변수
- 객체를 다룰 때 중요한 점은 참조 변수('redPen', 'bluePen', 'blackPen')에는 객체 자체가 아닌 해당 객체의 주소값이 저장된다는 점입니다.
- 실제 객체는 메모리의 힙 영역에 저장되며, 참조 변수는 그 객체가 저장된 메모리 위치를 가리킵니다.
- 따라서 각 참조 변수에 색깔, 가격, 제품번호 같은 데이터가 들어있는 것이 아니라, 객체를 가리키는 참조값(주소값)이 담겨 있습니다.
- 이러한 참조 변수를 통해 '.' 연산자로 객체의 필드나 메서드에 접근하여 데이터를 읽거나 수정할 수 있습니다.
반응형
'Language > Java' 카테고리의 다른 글
[Java] static (static 필드, static 메서드) (0) | 2024.08.27 |
---|---|
[Java] 캡슐화 (Encapsulation) (0) | 2024.08.27 |
[Java] 정보은닉(Infomation Hiding) (1) | 2024.08.26 |
[Java] 생성자(Constructor) (0) | 2024.08.26 |
[Java] 가변 파라미터 (0) | 2024.08.26 |
Comments