6장 객체
Last updated
Last updated
자바는 객체지향언어(Object-Oriented Programming)입니다. 정확히는 객체지향프로그래밍을 지원하는 언어라고 생각해주시면 됩니다. 객체지향프로그래밍(OOP)는 "객체로 프로그래밍하는것을 지향하는 언어"라고 생각할 수 있는데 여기서 객체란 무엇일까요?
프로그래밍에서 객체(Object)란 클래스(Class)를 통해 메모리 영역(Heap)에 저장공간이 할당된 데이터를 의미합니다. 자바에서는 new 연산자와 클래스의 생성자를 통해 객체를 생성하죠.
정리하자면 객체지향 프로그래밍(OOP)이란, 현실 세계에 존재하는 사물이나 개념을 객체라는 단위로 표현하고, 이들 객체 간의 상호작용을 통해 프로그램을 구성하는 방식입니다.
예를 들어 '자동차'는 속성(브랜드, 차종, 연비 등)과 행동(가속, 브레이크)이 있는 하나의 객체로 볼 수 있고, '운전자'라는 객체가 이를 조작하며, 이와 같은 객체들 간의 관계로 프로그램이 구성됩니다.
객체지향 프로그래밍 이전에는 절차지향 프로그래밍이 대세 프로그래밍 방법이었습니다. 절차지향 프로그래밍은 처리해야할 코드들을 목록형태로 만들어 순서대로 처리하고 결과를 도출합니다. 이러한 프로그램은 어플리케이션의 크기가 커질수록 프로그램이 복잡해져서 코드의 재사용이 어렵고 유지보수를 힘들게 한다는 단점이 있었습니다.
객체지향 프로그래밍은 절차지향 프로그래밍의 복잡성을 해결하기 위해 등장했습니다. 객체지향 프로그래밍은 여러 기능들을 객체 단위로 포장하여 관리하고, 이 객체들간의 상호작용으로 프로그래밍이 작동하도록 설계되었습니다. 객체지향의 등장으로 프로그램에 문제가 발생하면, 해당 문제가 있는 객체만 손보면 프로그램이 원활하게 돌아가므로 코드의 유지보수성이 크게 향상되었습니다.
컴퓨터 과학에서 객체는 클래스를 통해 메모리영역에 저장공간이 할당된 데이터를 의미했습니다. 즉 클래스란 객체를 생성하기 위한 도구로 비유하자면 설계도와 비슷합니다. 학생과 같은 객체를 뽑아내기 위해서는 먼저 학생을 생성할 수 있는 설계도인 클래스가 반드시 필요한 것입니다.
OOP에서 설명하는 객체를 생성하기 위한 역할을 하는게 바로 클래스입니다. 클래스를 통하여 객체에 대하여 명확히 정의하고, 이 객체들의 상호작용으로 프로그램이 작동하게 하는 것이죠. 클래스 이전에도 클래스와 비슷한 개념이 존재했습니다. C언어에서 제공하는 구조체는 객체 처럼, 다양한 속성(데이터)를 하나로 묶어 주는 역할을 했습니다.
다만 C언어의 구조체는 데이터를 묶을 수는 있지만 그 안에 행위에 해당하는 기능(메서드)들을 추가 할 수 없고, 내부의 데이터를 외부에서 쉽게 접근하여 확인할 수 있기 때문에 정보를 보호할 수 없었습니다. 이 구조체의 단점을 보완하기 위하여 고안된 개념이 클래스(Class)로, 클래스 내부에는 속성(데이터)과 기능(메서드)이 함께 포함되어 있으며, 객체 내부의 데이터는 함부로 조작할 수 없도록 접근제한처리 기능 또한 추가하였습니다. 거기에 더해 상속, 다형성 등 고급 기능들과 함께 생성자기능 또한 지원합니다.
정리하면 클래스는 구조체로부터 발전된 개념으로 단순한 데이터 묶음에서 벗어나 현실 세계의 객체를 정의할 수 있도록 발전되었습니다.
클래스를 정의할 때는 추상화 기법과 캡슐화를 통해 클래스를 모델링합니다. 추상화란 복잡한 사물이나 개념에서 핵심적인 속성만 골라내는 기법입니다. 현실세계의 수많은 클래스를 프로그래밍으로 구현해야 할 때 해당 객체의 모든 속성과 행동을 코드로 표현하려고 하면 너무 복잡해집니다. 따라서 프로그래밍에 필요한 중요한 특징들만 골라서 뽑아야 하는데 , 이 과정을 추상화라고 부릅니다.
회원정보 관리 프로그램을 설계할 때 회원의 정보를 프로그래밍으로 옮긴다면?
회원은 사람이고 사람은 수많은 특징을 가지고 있습니다. 키, 나이 , 성격, 외모, 지위 등등.. 하지만 이 모든 특징을 구현할 필요는 없고, 프로그램의 목적에 맞는 정보들만 추출하여 회원을 추상화 합니다.
캡슐화란 객체 내부의 데이터를 함부로 외부에서 조작하지 못 하도록 막기 위한 기능으로, 잘못된 데이터 조작으로 발생하는 프로그램 오작동을 방지할 수 있습니다. 캡슐화가 적용된 클래스의 객체에서는 객체 내부에서 사용해야 할 데이터가 있는 경우, 이 값을 안전하게 사용할 수 있는 메서드를 구현하여 데이터를 조작합니다. 자바에서는 접근제한자를 통해 캡슐화를 구현할 수 있습니다.