[리마인드] 자바 - 객체지향 프로그래밍 (OOP) 1탄
1. 개요
객체지향 프로그래밍(OOP)이란? Object Oriented Programming으로, 쉽게 말해 조립식 프로그래밍이다.
객체를 부분부분 미리 만들어놓고 조립해서 전체를 완성하는 프로그래밍 기법이다.
예를 들자면 자전거라는 프로그램을 만들기 위해, 프레임바디(객체), 핸들(객체), 기어(객체), 바퀴(객체)가 하나로 모여 자전거라는 프로그램을 만든다.
2. 장점
1) 유지보수 용이
프로그램 일부가 고장날 경우, 그 일부만 고치거나 혹은 교체 가능하다. → 유지보수성 용이
2) 객체 재사용
특정 객체를 다른 프로그램에도 쉽게 사용할 수 있다.
3) 확장성 용이
기존 프로그램에 새로운 객체 추가가 용이하다.
3. 객체가 뭐야?
그렇다면 객체란 무엇일까?
객체란 포괄적 의미로는 실생활에 존재하거나 그의 속성을 가지고 있으며, 식별 가능한 모든 것을 의미한다. 이렇게 보면 너무 추상적인 설명이라 쉽게 다가오진 않을 수 있겠다!
아까 위에서 언급한 자전거라는 완성체를 만들때 각각의 객체들을 조립해서 만든다고 했는데, 예를 들어 프레임바디 객체는 식별 가능하며, 프레임바디 타입이 티타늄인지, 스틸인지, 카본 파이버인지, 색상은 검은색, 빨간색, 회색 등 속성을 가질 수 있다.
자바 관점에서 객체는 '메소드, 변수를 가지며, 특정 역할을 수행하도록 인간이 정의한, 추상적인 개념이다.'
(이하 출처 나무위키) 이러한 객체는 '클래스'라는 것으로 설계 및 정의한다. 클래스를 '객체의 설계도'라고 생각하면 쉽게 다가올 것 같다!
설계도 (클래스)를 바탕으로 실제 객체를 만드는 과정을 '인스턴스화'라고 하며, 이러한 이유로 객체를 인스턴스라고 부르기도 한다. 인스턴스 생성 키워드는 'new'를 사용한다.
Gear gear1 = new Gear();
4. 예시 코드
자전거를 만드는 객체지향 프로그래밍 예시코드를 참고용으로 간단히 짜보았다.
/* 자전거 - 프레임바디 클래스 */
public class FrameBody {
private String type;
public void setType(String type){
this.type = type;
}
public String getType(){
return type;
}
public void frameBodyInfo(){
System.out.println(type + " 소재의 프레임바디 입니다.");
}
}
/* 자전거 - 핸들 클래스 */
public class Handle {
private String type;
public void setType(String type) {
this.type = type;
}
public String getType(){
return type;
}
public void handleInfo(){
System.out.println(type + "의 헨들을 장착했습니다.");
}
}
/* 자전거 - 기어 클래스 */
public class Gear {
private int dan;
public void setDan(int dan){
this.dan = dan;
}
public int getDan(){
return dan;
}
public void gearInfo(){
System.out.println(dan + "단 기어를 장착했습니다.");
}
}
/* 자전거 - 바퀴 클래스 */
public class Wheel {
private int size;
public void setSize(int size){
if(size >= 10){
this.size = size;
}else{
System.out.println("10인치 미만의 바퀴는 장착할 수 없습니다.");
}
}
public int getSize(){
return size;
}
public void wheelInfo(){
System.out.println(size + "사이즈의 휠을 장착했습니다.");
}
}
/* 자전거 클래스 */
public class Bicycle {
private FrameBody frameBody;
private Handle handle;
private Gear gear;
private Wheel wheel;
public Bicycle(FrameBody frameBody, Handle handle, Gear gear, Wheel wheel){
this.frameBody = frameBody;
this.handle = handle;
this.gear = gear;
this.wheel = wheel;
}
@Override
public String toString(){
return "FrameBody : " + frameBody.getType() + ", Handle : " + handle.getType() + ", Gear : " + gear.getDan() + "단, Wheel : " + wheel.getSize()
+ "인치의 자전거가 완성되었습니다.";
}
}
/* 메인 */
import OOP.Code.Bicycle.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/* 자전거 선택 프로그램 Start */
boolean loopFlag = true;
String frameBodyType = null;
String handleType = null;
int gearType = 0;
int wheelSize = 0;
int choice = 0;
while(loopFlag) {
System.out.println("자전거 프레임바디를 선택하세요");
System.out.println("1. Carbon Fiber\n2. Aluminium\n3. Titanium\n4. Steel");
System.out.println();
choice = Integer.parseInt(br.readLine());
switch (choice) {
case 1:
frameBodyType = "Carbon Fiber";
loopFlag = false;
break;
case 2:
frameBodyType = "Aluminium";
loopFlag = false;
break;
case 3:
frameBodyType = "Titanium";
loopFlag = false;
break;
case 4:
frameBodyType = "Steel";
loopFlag = false;
break;
default:
System.out.println("다시 시도해주세요.\n");
break;
}
}
loopFlag = true;
while(loopFlag) {
System.out.println("자전거 기어를 선택하세요");
System.out.println("1. 3단\n2. 4단\n3. 5단\n4. 6단");
System.out.println();
choice = Integer.parseInt(br.readLine());
switch (choice) {
case 1:
gearType = 3;
loopFlag = false;
break;
case 2:
gearType = 4;
loopFlag = false;
break;
case 3:
gearType = 5;
loopFlag = false;
break;
case 4:
gearType = 6;
loopFlag = false;
break;
default:
System.out.println("다시 시도해주세요.\n");
break;
}
}
loopFlag = true;
while(loopFlag) {
System.out.println("자전거 핸들을 선택하세요");
System.out.println("1. Carbon Fiber\n2. Plastic");
System.out.println();
choice = Integer.parseInt(br.readLine());
switch (choice) {
case 1:
handleType = "Carbon Fiber";
loopFlag = false;
break;
case 2:
handleType = "Plastic";
loopFlag = false;
break;
default:
System.out.println("다시 시도해주세요.\n");
break;
}
}
loopFlag = true;
while(loopFlag) {
System.out.println("자전거 휠 사이즈를 입력하세요. 저희 회사는 세세한 자전거 휠 사이즈를 제작해드립니다.");
wheelSize = Integer.parseInt(br.readLine());
if(wheelSize < 10){
System.out.println("10인치 미만은 선택하실 수 없습니다.");
}else{
loopFlag = false;
}
}
/* 자전거 선택 프로그램 End */
// 자전거 부품 생성
FrameBody frameBody1 = new FrameBody();
frameBody1.setType(frameBodyType);
Handle handle1 = new Handle();
handle1.setType(handleType);
Gear gear1 = new Gear();
gear1.setDan(gearType);
Wheel wheel1 = new Wheel();
wheel1.setSize(wheelSize);
// 자전거 조립 & 생성
Bicycle bicycle1 = new Bicycle(frameBody1, handle1, gear1, wheel1);
System.out.println(bicycle1);
}
}
긴 글 읽어주셔서 감사합니다! 잘못된 내용이 있거나 보충할 내용이 있다면 언제든지 댓글 부탁드립니다!