코딜기

[Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) 본문

Language/Java

[Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

코딜기 2024. 8. 26. 14:43
반응형

객체(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