참고자료

 

 

객체지향의 탄생 배경

  • 컴퓨터는 초창기에 미사일 실험과 같은 곳에서 사용 되었다. 그 과정에서 과학자들은 실제 세계와 유사한 가상 세계를 컴퓨터 속에 구현하고자 노력하였으며, 이러한 노력은 객체지향 이론을 탄생시켰다.
**"실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다"**

 

 

 

객체지향언어란

  • 객체지향언어는 기존의 것에서 다른것이 아닌 몇 가지 새로운 규칙을 추가한 발전된 형태의 것
  • 규칙들을 이용해서 코드 간에 서로 관계를 맺어 줌으로써 보다 유기적인 프로그램 구성

 

객체지향 언어의 주요 특징

**1. 코드의 재사용성이 높다.**
      => 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

**2. 코드의 관리가 용이하다.**
      => 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

**3. 신뢰성이 높은 프로그래밍을 가능하게 한다.**
      => 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,
           코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

 

여기서 가장 큰 장점은 "코드의 재사용성이 높고 유지보수가 용이하다."는 것이다.

객체지향언어는 개발과 유지보수에 드는 시간과 비용을 획기적으로 개선하였다.

 

 

어떻게 객체지향언어를 공부해야할까

너무 객체지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음

어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지 고민하며 점차 개선해 나가는 것이 좋다.

⇒ 이론을 많이 안다고 해서 좋은 설계를 할 수 있는 것은 아니다.

번외 ⇒ 객체지향은 인간 지향이다.(링크)

 

클래스와 객체

**클래스의 정의** 클래스란 객체를 정의해 놓은 것이다.
**클래스의 용도** 클래스는 객체를 생성하는데 사용된다.

클래스는 '객체의 설계도 또는 틀'

 

객체란?

사전에서의 객체

객체(Object)의 사전적인 정의는, '실제로 존재하는 것'이다.

우리가 주변에서 볼 수 있는 책상, 의자, 자동차와 같은 사물들이 곧 객체이다.

객체지향이론에서의 객체(Object)

사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.

프로그래밍에서의 객체

클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.

**객체의 정의** 실제로 존재하는 것, 사물 또는 개념
**객체의 용도** 객체가 가지고 있는 기능과 속성에 따라 다름
**유형의 객체** 책상, 의자, 자동차, TV와 같은 사물
**무형의 객체** 수학공식, 프로그램 에러와 같은 논리나 개념

 

 

클래스와 객체의 관계

통상적으로 클래스설계도, 객체제품으로 설명한다.

 

  • 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유와 같다. 하나의 설계도만 만들어 놓으면 제품을 만드는 일이 쉬워진다.
  • 매번 객체를 생성할 때마다 어떻게 객체를 만들어야 할지를 고민하지 않아도 된다.

클래스와 객체의 관계 결론

  • 클래스와 객체의 관계를 대략적으로 알고 코드로 구현해봐야 알 수 있다.
  • 객체지향언어의 규칙과 개념은 우선 외우고 뭔가 구현해보면서 대입해봐야 한다.
  • 클래스와 객체의 관계를 붕어빵 기계 붕어빵의 개념이 아니라고 하는게 있다. ⇒ 자바의 정석 저자님 말로는 붕어빵 기계와 붕어빵은 단순히 설명을 위한 예시
  • 붕어빵은 맛있다.

 

 

 

객체와 인스턴스

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며,

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.

ex) TV 클래스로부터 만들어진 객체를 TV클래스의 인스턴스라고 한다.

  • 객체: 소프트웨어 세계에 구현할 대상 ⇒ '클래스의 인스턴스'
    • 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고있다.
  • 인스턴스: 설계도 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
    • 어떤 클래스로부터 만들어진 것인지 강조하는 보다 구체적인 의미

 

객체의 구성요소 - 속성과 기능

객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.

즉 객체는 속성과 기능의 집합이라고 할 수 있다.

그리고 객체가 가지고 있는 속성과 기능을 그 **객체의 멤버(구성원, member)**라 한다.

 

 

 

속성(property): 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)

기능(function): 메서드(method), 함수(function), 행위(behavior)

 

 

 

 

 

 

 

객체 생성 후 메모리

 

 

메소드(Method)

  • 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.
  • 기본적으로 수학의 함수와 유사하다.
  • 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다.

메소를 사용하는 이유?

  1. 높음 재사용성(reusuability) ex) Java API에서 제공하는 메서드
  2. 중복된 코드의 제거 ⇒ 반복되는 문장들 대신 메서드 호출하는 한 문장으로 대체할 수 있다.
  3. 프로그램의 구조화 ⇒ 메인 메서드에 모든 코드를 작성하는게 아니라 분리해서 구조화 시킨다.

 

생성자(Constructor)

  • 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
  • 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다.
  • 메서드처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다. ⇒ 그렇다고 해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지 않는다.

 

  • 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다. ⇒ 기본 생성자(default constructor)
  • 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다.
  • 객체 생성자 메서드라고도 불린다.

 

 

 

반응형

+ Recent posts