목차
객체지향 프로그래밍
클래스와 객체
객체지향 프로그래밍을 설명하기에 앞서 클래스와 객체의 의미를 먼저 알고 들어가야 한다.
클래스의 정의 - 클래스란 객체의 속성과 행동을 정의해 놓은 것이다.
클래스의 용도 - 클래스는 객체를 생성하는데 사용된다.
그러면 도대체 객체는 무엇일까?
객체의 정의 - 실제로 존재하는 것. 사물 또는 개념
객체의 용도 - 객체가 가지고 있는 기능과 속성에 따라 다르다.
객체의 사전적인 정의는 '실제로 존재하는 것'이다. 지금 내 앞에 있는 컴퓨터, 핸드폰, 필통, 의자 모두 객체이다. 형체가 있는 것만 객체가 될 수 있는 것은 아니다. 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.
프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.
1) 객체들의 공통된 속성들을 모아 2) 클래스로 속성과 행위를 정의하고, 이를 통해 또 3) 새로운 객체를 생성(=클래스에 정의된 내용대로 메모리에 생성)할 수 있다.
보통 클래스와 객체의 관계를 붕어빵틀-붕어빵, TV설계도-TV 이런식으로 설명하는데 비전공자에 아무것도 몰랐던 나는 이 말이 와닿지가 않았었다.
위의 말을 하나씩 살펴보자
1번. 객체들의 공통된 속성들을 모은다.
나는 꽃을 좋아한다. 그 중에서도 방울꽃, 프리지아, 백합을 좋아한다. 이 객체들의 공통된 속성과 행위들을 뽑아보자.
1. 꽃 종류가 있다. 2. 꽃말이 있다. 3. 꽃 색깔이 있다. 4. 싹을 틔우고, 자라고, 시든다.
2번. 클래스로 속성과 행동을 정의한다.
객체의 속성과 행동을 정의해 클래스를 만들었다.
이를 통해 새 객체를 만들 수 있다.
3번. 새로운 객체를 생성할 수 있다.
나는 방울꽃, 프리지아, 백합의 특징을 뽑아 클래스를 만들었지만, 같은 속성과 행위를 가지고 있다면 언제든지 새로운 객체를 다음과 같이 만들어낼 수 있다.
끝!
객체지향 프로그래밍의 의미
객체지향 프로그래밍이란, 프로그래밍에 필요한 공통 속성과 기능을 묶어 객체를 만들고 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
객체지향 프로그래밍이란, 1) 프로그래밍에 필요한 공통 속성과 기능을 묶어 2) 객체를 만들고 3) 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
하나씩 끊어서 설명하면 다음과 같다.
1번. 프로그래밍에 필요한 공통 속성과 기능을 묶는다.
나는 동물의 공통 속성과 기능을 묶어 위와 같이 정의했다.
2. class를 바탕으로 객체를 생성한다.
class를 바탕으로 토끼와 여우 객체를 생성했다.
3. 객체들간 유기적인 상호작용을 통해 로직을 구성한다.
내가 구현할 로직은 이렇게 될것이다. 아니면 먹히기전에 달려서... 살수도 있겠지
다시말해 객체 지향 프로그래밍이란 데이터와 행위들을 하나로 묶어 객체를 만들고, 각 객체의 메소드나 필드를 호출하면서 서로 간의 상호작용을 통해 알고리즘을 구성하는 방식 이라고 할 수 있다.
여기서 공통적 특성을 모아 정의하는 것은 객체지향의 4가지 특성 중 추상화 라고 하는데 이는 다음 글에서 설명할 것이다.
객체지향프로그래밍의 장단점
장점
- 클래스 단위로 모듈화 시켜 개발하기 때문에 업무 분담이 쉽다.
- 수정해야할 부분이 클래스 내부 변수 혹은 메서드로 있기 때문에 수정이 쉬워 유지보수에 용이하다.
- 클래스를 가져와 이용하거나 상속을 통해 확장하는 등 코드 재사용을 할 수 있다.
단점
- 설계 시 많은 시간과 노력이 필요하다.
- 처리 속도가 상대적으로 느리다.
참고
자바의 정석-남궁성