"객체지향 프로그래밍"의 두 판 사이의 차이
잔글 |
|||
2번째 줄: | 2번째 줄: | ||
== 역사 == | == 역사 == | ||
− | 초기 프로그래밍 방식인 절차적 프로그래밍 방식은 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 내는 언어로서, 조금만 복잡해져도 다른 사람이 보고 이해하기 어려울 정도여서 유지보수가 어려운 단점이 있었다. 절차적 프로그래밍 방식을 보완하기 위해 1960년 [[조한 달]]과 [[크리스틴]]이 [[시뮬라67]](Simula67)을 발표했다. 시뮬라는 최초의 객체 지향 프로그래밍 | + | 초기 프로그래밍 방식인 절차적 프로그래밍 방식은 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 내는 언어로서, 조금만 복잡해져도 다른 사람이 보고 이해하기 어려울 정도여서 유지보수가 어려운 단점이 있었다. 절차적 프로그래밍 방식을 보완하기 위해 1960년 [[조한 달]]과 [[크리스틴]]이 [[시뮬라67]](Simula67)을 발표했다. 시뮬라는 최초의 객체 지향 프로그래밍 언어로 클래스 라는 개념이 도입되었으나 널리 확산되지는 못하였다. 이 뒤로 10여년 간 객체 지향 언어는 전혀 주목을 받지 못하였고 이어서 팰러액토 연구소의 [[스몰토크]](Smalltalk), 미 국방성의 에이다 등이 만들어졌다. 이후 [[AT&T]] [[벨 연구소]]의 [[C++]]등의 프로그램들이 객체 지향 언어에 큰 영향을 미쳤던 GUI의 발전에 따라 향상되었다. 1990년대 중반 이후로 각광받고 있는 [[썬 마이크로시스템즈]]의 [[자바]](Java) 언어가 만들어졌다. 이후 [[펄]](Perl), [[파이썬]](Python), [[PHP]], [[루비]](Ruby), [[C샵|C#]] 등 다양한 객체 지향 프로그래밍 언어가 만들어졌다. |
== 구성 요소 == | == 구성 요소 == | ||
− | * '''[[객체]]'''(object) : 객체는 데이터와 그에 관련되는 동작(절차, 방법, 기능)을 모두 포함하는 [[인스턴스]]이다. | + | * '''[[객체]]'''(object) : 객체는 자신의 고유의 속성 (attribute)을 가지며, 클래스에서 정의한 행위 (behavior)를 수행 가능하다. 객체에서 실행하는 행위를 클래스에서 정의된 행위를 공유함으로써 메모리를 추가로 사용하지 않기에 중복해서 사용하는 값을 지불할 필요가 없어진다. 데이터와 그에 관련되는 동작(절차, 방법, 기능)을 모두 포함하는 [[인스턴스]]이다. |
− | * '''[[클래스]]'''(class) : 같은 종류의 집단에 속하는 속성 | + | * '''[[클래스]]'''(class) : 같은 종류의 집단에 속하는 속성(attribute)과 행위를 정의한 객체지향 프로그램의 기본적인 사용자 정의 데이터형(defined data type)이며 오퍼레이션, 관계 등을 갖고 있는 객체들의 집합이다. 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 한다. |
− | * '''[[메소드]]'''(method) : 클래스 내부에 정의된 객체가 수행해야 할 오퍼레이션이다. | + | * '''[[메소드]]'''(method) : 클래스 내부에 정의된 객체가 수행해야 할 오퍼레이션이다. 한 객체의 서브루틴 형태로 객체의 속성을 조작하는데 사용된다. 존의 프로그래밍 언어에서 [[함수]](function)와 같은 역할을 한다. 한 객체의 서브루틴 형태로 객체의 속성을 조작하는데 사용된다. |
+ | |||
== 특징 == | == 특징 == | ||
− | * '''[[캡슐화]]'''( | + | * '''[[캡슐화]]'''(Encapsulation) : 캡슐화란 관련 기능과 특성을 모아서 분류하는 작업이다. 프로그램의 실제 구현 내용이 외부로 드러나지 않도록 특정 모듈([[클래스]]) 내부로 은닉하는 것이다. |
− | * '''[[상속]]'''( | + | * '''[[상속]]'''(Inheritance) : 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받음으로써, [[캡슐화]] 및 재사용이 용이하도록 해준다. |
− | * '''[[다형성]]'''(多形性, | + | * '''[[다형성]]'''(多形性, Polymorphism) : 하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있는 성질을 뜻한다. 일반적으로 [[오버라이딩]] , [[오버로딩]]을 의미한다. |
+ | * '''[[자료 추상화]]'''(Data Abstraction) : 불필요한 정보를 숨기고 중요한 정보만 표현함으로 프로그램을 보다 간단화 시켜 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다. | ||
+ | * '''[[동적 바인딩]]'''(Dynamic binding) :실행 시간 중 일어나거나 실행 과정에서 변경될 수 있는 바인딩이다. 정적 바인딩과는 대비되는 개념으로 헌 개체나 기호를 실행과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다. | ||
== 객체 지향 언어 == | == 객체 지향 언어 == | ||
27번째 줄: | 30번째 줄: | ||
* [[델파이]](Delphi) | * [[델파이]](Delphi) | ||
* [[ASP]] | * [[ASP]] | ||
+ | |||
+ | == 참고 자료 == | ||
+ | *위키백과,<[https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D 객체 지향 프로그래밍]>, 《위키백과》, 2020-07-23 | ||
+ | *정아마추어, <[https://jeong-pro.tistory.com/95 객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)]>, 《기본기를 쌓는 정아마추어 코딩블로그》, 2017-11-15 | ||
== 같이 보기 == | == 같이 보기 == |
2020년 8월 4일 (화) 13:59 판
객체 지향 프로그래밍(OOP, Object-Oriented Programming)이란 컴퓨터 프로그램을 여러 명령어(command)의 목록으로 보지 않고 여러 개의 독립된 객체(object)들의 집합으로 파악하는 프로그래밍 기법이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 객체라는 기본 단위로 나누고, 각각의 객체가 메시지를 주고받으며 데이터를 처리하는 비절차적 프로그래밍 방법이다.
역사
초기 프로그래밍 방식인 절차적 프로그래밍 방식은 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 내는 언어로서, 조금만 복잡해져도 다른 사람이 보고 이해하기 어려울 정도여서 유지보수가 어려운 단점이 있었다. 절차적 프로그래밍 방식을 보완하기 위해 1960년 조한 달과 크리스틴이 시뮬라67(Simula67)을 발표했다. 시뮬라는 최초의 객체 지향 프로그래밍 언어로 클래스 라는 개념이 도입되었으나 널리 확산되지는 못하였다. 이 뒤로 10여년 간 객체 지향 언어는 전혀 주목을 받지 못하였고 이어서 팰러액토 연구소의 스몰토크(Smalltalk), 미 국방성의 에이다 등이 만들어졌다. 이후 AT&T 벨 연구소의 C++등의 프로그램들이 객체 지향 언어에 큰 영향을 미쳤던 GUI의 발전에 따라 향상되었다. 1990년대 중반 이후로 각광받고 있는 썬 마이크로시스템즈의 자바(Java) 언어가 만들어졌다. 이후 펄(Perl), 파이썬(Python), PHP, 루비(Ruby), C# 등 다양한 객체 지향 프로그래밍 언어가 만들어졌다.
구성 요소
- 객체(object) : 객체는 자신의 고유의 속성 (attribute)을 가지며, 클래스에서 정의한 행위 (behavior)를 수행 가능하다. 객체에서 실행하는 행위를 클래스에서 정의된 행위를 공유함으로써 메모리를 추가로 사용하지 않기에 중복해서 사용하는 값을 지불할 필요가 없어진다. 데이터와 그에 관련되는 동작(절차, 방법, 기능)을 모두 포함하는 인스턴스이다.
- 클래스(class) : 같은 종류의 집단에 속하는 속성(attribute)과 행위를 정의한 객체지향 프로그램의 기본적인 사용자 정의 데이터형(defined data type)이며 오퍼레이션, 관계 등을 갖고 있는 객체들의 집합이다. 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 한다.
- 메소드(method) : 클래스 내부에 정의된 객체가 수행해야 할 오퍼레이션이다. 한 객체의 서브루틴 형태로 객체의 속성을 조작하는데 사용된다. 존의 프로그래밍 언어에서 함수(function)와 같은 역할을 한다. 한 객체의 서브루틴 형태로 객체의 속성을 조작하는데 사용된다.
특징
- 캡슐화(Encapsulation) : 캡슐화란 관련 기능과 특성을 모아서 분류하는 작업이다. 프로그램의 실제 구현 내용이 외부로 드러나지 않도록 특정 모듈(클래스) 내부로 은닉하는 것이다.
- 상속(Inheritance) : 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받음으로써, 캡슐화 및 재사용이 용이하도록 해준다.
- 다형성(多形性, Polymorphism) : 하나의 변수명이 상황에 따라 다른 의미로 해석될 수 있는 성질을 뜻한다. 일반적으로 오버라이딩 , 오버로딩을 의미한다.
- 자료 추상화(Data Abstraction) : 불필요한 정보를 숨기고 중요한 정보만 표현함으로 프로그램을 보다 간단화 시켜 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.
- 동적 바인딩(Dynamic binding) :실행 시간 중 일어나거나 실행 과정에서 변경될 수 있는 바인딩이다. 정적 바인딩과는 대비되는 개념으로 헌 개체나 기호를 실행과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다.
객체 지향 언어
다양한 객체 지향 프로그래밍 언어가 존재한다.
- 스몰토크(Smalltalk)
- 루비(Ruby)
- 파이썬(Python)
- 자바(Java)
- C#
- C++
- Objective-C
- 오브젝티브-파스칼(Objective-Pascal)
- 비주얼베이직닷넷(VB.NET)
- 델파이(Delphi)
- ASP
참고 자료
- 위키백과,<객체 지향 프로그래밍>, 《위키백과》, 2020-07-23
- 정아마추어, <객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)>, 《기본기를 쌓는 정아마추어 코딩블로그》, 2017-11-15