기본 개념은 '실제 세계는 사물( 객체 )로 이루어져 있으며 발생하는 모든 사건들은 사물 간의 상호작용이다.'라는 것이다.
실제 사물의 속성과 기능을 분석한 다음 데이터( 변수 )와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같다.
객체지향 언어의 주요 특징
코드의 재사용성이 높다. 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
코드의 관리가 용이하다. 코드 간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
신뢰성이 높은 프로그래밍을 가능하게 한다. 제어자의 메소드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다.
2. 클래스와 객체
클래스와 객체의 정의와 용도
클래스란 객체를 정의해 놓은 것이며 클래스는 객체를 생성하는 데 사용된다.
객체의 사전적인 정의는 실제로 존재하는 것이다.
객체지향 이론에서는 사물과 같은 유형적인 것뿐만 아니라 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.
Ex)
클래스
객체
제품 설계도
제품
TV설계도
TV
붕어빵 기계
붕어빵
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스( instance )라고 한다.
TV는 TV 클래스의 인스턴스이다. TV는 객체이다.( 엄격히 구분할 필요는 없다. )
객체의 구성요소 - 속성과 기능
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 즉, 속성은 기능의 집합이라고 할 수 있다.
객체가 가지고 있는 속성과 기능을 그 객체의 멤버( member )라고 한다.
클래스는 객체를 정의한 것이므로 클래스로부터 객체를 생성하면 정의된 속성과 기능을 가진 객체가 만들어지는 것이다.
* 속성 ( property ), 멤버 변수 ( member variable ), 특성 ( attribute ), 필드 ( field ), 상태 ( state ) * 기능 ( function ), 메소드 ( method ), 함수 ( function ), 행위 ( behavior ) Tv클래스 정의, Tv클래스의 속성과 기능
인스턴스의 생성과 사용
클래스로부터 인스턴스를 생성하는 방법은 아래와 같이 여러 가지가 있다.
클래스 변수명;
클래스의 객체를 참조하기 위해 참조 변수 선언
변수명 = new 클래스명();
클래스의 객체를 생성한 후, 객체의 주소를 참조 변수에 저장
인스턴스는 참조 변수를 통해서만 다룰 수 있으며, 참조 변수의 타입은 인스턴스의 타입과 일치해야 한다. Tv클래스로부터의 객체 생성
같은 클래스로부터 생성되었을지라도 각 인스턴스는 서로 독립적이다. 같은 클래스이더라도 객체는 독립적으로 사용
참조 변수는 STACK에 생기고 뒤에 new 클래스명();은 HEAP에 들어간다.
객체 배열
객체 역시 배열로 다루는 것이 가능하며 이를 '객체 배열'이라고 한다. 객체 배열* 각 배열에 해당하는 인스턴스는 독립적으로 이루어져 있다.
클래스의 또 다른 정의
클래스 - 데이터와 함수의 결합 변수 -> 배열 -> 구조체 -> 클래스
클래스 - 사용자 정의 타입( user- defined type ) 프로그래밍 언어에서 제공하는 자료형 외에 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것을 사용자 정의 타입이라고 한다.