티스토리 뷰


이전에 절차적 프로그래밍을 소개하면서

객체지향 프로그래밍과 비교하여

나오게 된 배경과 기능을 

간략히 소개하였습니다.

이번에는 좀 더 자세히 의미를 살펴보고

예제를 통해 어떤 식으로 사용되는지 알아보겠습니다.


========================================================


객체지향 프로그래밍 : OOP(Object-Oriented-Programming)



1. OOP가 무엇일까?


 객체지향 프로그래밍은 Object-Oriented-Programming이라 하며 줄여서 OOP라고도 부릅니다.

여기서 객체란 실세계에 존재하거나 생각할 수 있는 것을 객체, Object라고 합니다.

이 말은 즉, 객체 지향 프로그래밍은 실세계에 존재하거나 개발자가 만들고자 하는 것을 하나의 객체로 프로그래밍하는 것을 지향하는 것으로 생각할 수 있습니다.

특정한 틀 안에 개발자가 만들고자 하는 객체의 특성과 기능을 넣어서 마치 실세계에 존재하는 하나의 물체처럼 소프트웨어 개발 관점에서 관리하는 것입니다.



2. 절차적 프로그래밍보다 객체지향 프로그래밍의 장점은 무엇일까?


 절차적 프로그래밍은 모든 프로그래밍의 바탕이 된다고 생각할 수 있습니다. 하지만 이것만으로는 프로그래밍을 효율적이고 가독성 있게 구현하기에는 한계가

있었습니다. 이것을 바탕으로 나온 것이 객체지향 프로그래밍입니다.

 절차적 프로그래밍은 데이터 관리 능력 없이 받은 데이터를 특정 기능으로 처리하고 반환해주는 기능만 있습니다.

하지만 절차지향 프로그래밍은 데이터를 처리할 기능을 구현하는 뿐만 아니라 데이터를 보관할 능력까지 갖추었습니다.






3. 객체 지향 프로그래밍의 구성 요소



객체지향 프로그래밍의 구성요소는 대표적으로 클래스, 객체, 메소드 3가지입니다.


클래스란 같은 종류의 집단에 속하는 속성과 행위를 정의한 큰 틀이라 생각하면 쉽습니다. 이는 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 합니다.

객체란 클래스의 인스턴스입니다. 자신 고유의 속성을 가지며 클래스에서 정의한 행위를 수행할 수 있습니다.

쉽게 말해 사람이라는 클래스가 있으면 이름이 다른 사람을 만들었을 때 각각의 사람이 객체가 되는 것입니다.

메소드란 절차적 프로그래밍에서 프로시저를 생각하면 됩니다. 데이터를 이용해 객체가 작동할 기능을 정의한 것입니다.


인스턴스랑 객체는 보통 같은 개념으로 쓰입니다. 인스턴스와 객체를 같게 생각해도 무난하다고 합니다.

하지만 인스턴스랑 객체는 엄연히 다른 개념이고 알고는 있어야 합니다.


객체는 소프트웨어 세계에 구현할 대상이고, 인스턴스는 소프트웨어 세계에 구현된 실체입니다. 클래스는 설계도라고 비유하면 이해가 쉽습니다.

객체는 현실의 대상과 비슷하지만, 소프트웨어 관점에서는 콘셉에 불과한 것이고 콘셉 이상으로 많은 것들을 사고하여 구현해야 하므로 이를 위해 설계도, 클래스를 작성하는 것입니다. 설계도를 바탕으로 객체를 소프트웨어에 실체화하면 그것이 인스턴스가 되고 이 과정을 인스턴스 화라고 합니다. 이런 실체화된 인스턴스는 메모리에 할당됩니다.

이때 인스턴스를 객체라고 부르는데 정확하게는 객체 안에 인스턴스가 있다고 볼 수 있습니다. 물론 소프트웨어 관점에서는 인스턴스가 가깝습니다.






4. 간단한 예제를 통해 객체지향 프로그래밍의 장점을 알아보자.


로봇이라는 객체를 만들어 이름이 다른 로봇을 여러 개 만들어보겠습니다.

class Robot { // 객체명
// 객체가 가지고 있는 데이터
String name;
int type;

// 객체가 작업해야 할 메소드
String greet(){
String ment = "안녕하세요. 당신의 ";
switch(type){ // 객체 데이터를 이용 가능
case 1:
ment += "전투로봇!! ";
break;
case 2:
ment += "청소로봇!! ";
break;
default :
ment += "로봇 ";
}
ment += name + " /가 인사드립니다.";

return ment;
}
}

 

class Source03_RobotUse {
public static void main(String[] args) {
Robot r1 = new Robot();
r1.name = "네모";
r1.type = 2;
System.out.println(r1.greet());

Robot r2 = new Robot();
r2.name = "알파고";
r2.type = 1;
System.out.println(r2.greet());

r2 = r1;
System.out.println();
System.out.println(r2.greet());

r2.name = "타노스";
System.out.println(r1.greet());
}
}


객체를 사용하면 다음과 같이 네모 알파고 타노스라는 로봇을 생성할 수 있습니다.

만약 이 로봇들을 절차적 프로그래밍 방식으로 설계했다면 name 변수와 type 변수를 생성하고자 하는 로봇의 수 만큼 생성해줘야 하는 아주 불필요한 상황이 발생합니다.

또한 객체지향 프로그래밍을 사용함으로써 코드의 가독성을 향상할 수 있고 객체를 다시 활용할 수 있는 큰 장점이 생깁니다.


객체지향 프로그래밍의 특징을 정리해 보자면,


1. 추상화(Abstraction) - 우리가 구현하는 객체들이 가진 공통적인 데이터와 기능을 도출해 내는 것

2. 캡슐화(Encapsulation) - 데이터 구조와 데이터를 다루는 방법을 결합해 묶는 것

3. 상속(Inheritance) - 상위개념의 특징을 하위 개념이 물려받는 것

4. 다형성(Polymorphism) - 생물학에서 나온 개념으로 같은 종이지만 각자의 성질에 따라 분류하는 것


어떻게 생각하면 4개가 연관되어 비슷한 특징이라고 생각할 수도 있지만, 각자의 의미를 잘 알아야 합니다.

상속과 다형성은 이후에 예제를 통해서 좀 더 알아보겠습니다.




5. 객체 지향 프로그래밍의 원칙??


 사실 객체 지향 프로그램을 만들 때 원칙도 존재합니다. 저는 이 원칙을 정보처리기사를 공부하면서 처음 봤었는데 자바 입문서와 같은 서적에서는 다루지 않는 것을 보니 참고 정도로 알아두면 좋을 것 같습니다. 객체 지향 프로그래밍의 원칙 5가지를 줄여 SOLID라고도 부릅니다.


[출처] http://m.dbguide.net/knowledge.db?cmd=view&boardConfigUid=21&boardUid=185886





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함