최근의 고급 프로그래밍 언어는 대부분이 객체 지향 언어입니다.
자바도 물론 OOP(Object Oriented Programming, 객체 지향 프로그래밍) 언어 입니다.
자바를 배우기 시작했을 때 가장 어려웠던 부분이 객체(object) 라는 것을 이해하는 것이었습니다.
따라서 자바를 본격적으로 배우기 전에 객체에 대한 개념을 먼저 이해하고 넘어가는 것이 효율적이라고 생각됩니다.
빨리 배우고 싶은 초보자에게는 답답한 일이 아닐 수 없지만!
제 경험으로 볼 때 객체를 알고 나면 그 다음의 속도는 훨씬 더 빨라질 수 있을 것입니다.
이해도 돕고 영어공부도 하기 위해서 영문을 번역하면서 차근차근 이해해 보기로 합니다.
"object는 class의 instance 이다."
이런 말에 처음으로 접하면 컴퓨터 초보자는 외계어 이상을 대하는 느낌이 들 것입니다.
객체는 무엇이고 클래스는 무엇이고 또 인스턴스란 무엇이란 말인가?
일단 자바를 배우기로 했으니 이해가 되든 안되든 객체부터 배워보기 시작합니다.
주변을 둘러보면 여러 가지 물건들이 보이는데, 주변의 책상, 의자, 컴퓨터, 마우스, 시계 등
모든 것을 객체라고 할 수 있습니다.
이렇게 실세계에 존재하는 객체(object)는 다음과 같은 2가지 구성요소를 갖고 있습니다.
An object encapsulates state and behavior. 객체는 상태와 동작을 포괄하고 있습니다.
- 상태(state): 객체가 갖고 있는 속성(attribute) 또는 특성
- 동작(behavior): 객체가 갖고 있는 기능 또는 할 수 있는 행동
예를 들어, 자동차 객체(object)는 자동차 색, 바퀴, 핸들, 배기량, 현재 속도, 현재 기어 위치 등의 상태를
갖고 있습니다.
동시에 자동차 객체는 달린다, 멈춘다, 기어를 바꾼다, 속도를 높이거나 낮춘다, 경적을 울린다 등의
동작도 할 수 있습니다.
Below is an example showing the creation of Cube objects by using the new operator.
아래는 연산자 new를 사용하여 객체 Cube를 만드는 것을 보여주는 예제 입니다.
물론 잘 이해가 되지 않겠지만 객체가 가진 상태와 동작을 이해하기 위하여 일단 살펴보기로 합니다.
public class Cube { int length = 10; int breadth = 10; int height = 10; public int getVolume() { return (length * breadth * height); } public static void main(String[] args) { Cube cubeObj; // Cube 참조(Reference)를 생성합니다 cubeObj = new Cube(); // Cube의 객체를 생성합니다 System.out.println("Volume of Cube is : " + cubeObj.getVolume()); } } |
위 예제는 Cube 라는 객체의 클래스를 보여줍니다.
이 클래스 Cube는 fields 3개, length, breadth, height를 정의하고 있는데, 이것은 객체가 갖고 있는 상태를 나타내고 있습니다.
또한 이 클래스 Cube에는 member function인 getVolume()가 들어있는데, 이것은 객체가 갖고 있는 동작을 나타냅니다.
그럼 클래스가 무엇인지 보다 상세하게 알아보기로 합니다.
클래스를 쉽게 설명하기 위하여 자주 사용하는 것이 자동차 설계도 입니다.
클래스는 설계도(blueprint) 입니다.
이 설계도(클래스)를 기반으로 여러 개의 자동차(객체)를 만들어낼 수 있습니다.
현대자동차의 경우 에쿠스라는 자동차의 설계도를 갖고 있을 것입니다.
에쿠스 설계도(클래스)를 기반으로 검정색 에쿠스(객체)도 만들고 흰색 에쿠스(객체)도 만들 것입니다.
아래 A라는 클래스가 있습니다.
class A {
}
아래에 있는 식이 class A를 기반으로 객체 x를 만드는 방식입니다.
A x = new A();
일단 이 방식을 수학공식 처럼 머릿 속에 기억해 놓아야 합니다.
이렇게 class A { }를 instance화 시킨 것이 객체(x)입니다.
x 라는 객체(object)를 만들기 전에 미리 그 객체의 특성을 정의해 놓는 것이 A라는 설계도 즉, 클래스입니다.
A라는 class를 사용하여 x라는 객체를 만들기 위하여 A x = new A(); 라는 공식을 사용했습니다.
class는 일종의 규격서(specification)라고도 할 수 있는데, 이 규격서는 집 자체가 아니고, 집을 짓기 위한 일종의 설계도일 뿐입니다.
클래스는 세상의 모든 물건(object)을 추상화(abstraction)라는 작업을 통해 자바 프로그램에 사용할 수 있는 코드 형태로 만든 규격이라고 할 수 있습니다.
설계도를 가지고 집을 지었다면 바로 그 집이 '객체(object)'인 것입니다.
미리 선언된 class의 정의를 갖고 new라는 keyword를 이용하여 만든 것이 object 입니다.
여기서 사용된 new 라는 단어를 keyword라고 하는데 일단은 어떤 클래스를 갖고 객체를 만들 때 사용하기로 약속된 단어입니다.
다른 예를 설명해보겠습니다.
public class 사람 {
**********
}
사람 홍길동 = new 사람();
사람(class)만으로는 의미가 없고, 실제로 특정인 홍길동(object)을 만들어야 합니다.
먼저 class 사람을 선언한 다음 new라는 keyword를 통해 object 홍길동을 만들어 사용하는 것입니다.
이제 직원 명부를 만들어봅니다.
class DopzaclubEmpro {
String name;
String designation;
String department;
void print() {
System.out.println(name + " " + designation + "은 " + department + "에서 일합니다.");
}
}
위에서는 상태를 표현하는 명사에 해당하는 멤버변수(member variable) 그리고 동작을 나타내는 동사에 해당되는 멤버 메소드(member method)를 모두 정의했습니다.
DopzaclubEmpro라는 설계도(class)를 만들었으니 이제 집(object)을 지어봅니다.
DopzaclubEmpro employee = new DopzaclubEmpro();
이 집을 program에서 실제로 사용해봅니다.
DopzaclubEmpro.name = "홍길동";
DopzaclubEmpro.designation = "과장";
DopzaclubEmpro.department = "인사부서";
이렇게 object에 실제 data를 저장하고, 한 사원의 정보를 넣었습니다.
그럼 이 사원의 정보를 화면에 출력하고 싶으면 다음과 같이 하면 됩니다.
DopzaclubEmpro.print(); // member method 호출
화면에 "홍길동 과장은 인사부서에서 일합니다." 라고 출력될 것입니다.
Creating variables of your class type is similar to creating variables of primitive data types, such as integer or float.
클래스 타입 변수를 만드는 것은 원시 데이터 타입(integer, float 등)의 변수를 만드는 것과 비슷합니다.
Each time you create an object, a new set of instance variables comes into existence which defines the characteristics of that object.
object를 만들 때 마다 새로운 세트의 인스턴스 변수가 나타나는데, 이 인스턴스 변수가 새로 생긴 객체의 특징을 정의합니다.
If you want to create an object of the class and have the reference variable associated with this object, you must also allocate memory for the object by using the new operator.
클래스의 객체를 만들고 싶다면 그리고 이 객체와 연계된 참조변수를 만들고 싶다면 연산자 new를 사용하여 그 객체에 대하여 메모리를 할당해야 합니다. * 즉 하드웨어에 있는 메모리를 물리적으로 할당해줘야 합니다. 물론 자동적으로 일어나는 일입니다.
This process is called instantiating an object or creating an object instance.
이러한 프로세스를 객체 인스턴스화 또는 객체 인스턴스의 생성 이라고 합니다.
The process of creating objects from a class is called instantiation.
클래스로부터 객체를 생성시키는 과정을 instantiation 이라고 합니다.
이렇게 객체를 만드는 이유는 컴퓨터에서 memory를 확보하여 쓸 수 있게 하기 위해서 입니다.
이런 방식을 통해서 실제로 객체를 만들어야 컴퓨터 안의 memory를 확보해서, 하고 싶은 내용을
그 memory에 올려서 사용할 수 있기 때문입니다.
지금까지 이해가 잘 되셨다면 문제가 없지만 저는 이 부분에서 객체하고 인스턴스를 구분하기가 쉽지 않았던 기억이 있습니다.
두 가지 용어가 같은 의미인 것 같은데 경우에 따라 다르게 사용되기 때문입니다.
객체는 어떤 클래스를 사용해서 선언된 것입니다.
인스턴스는 만들어진 객체가 메모리에 할당되어 실제 메모리를 차지하는 것입니다.
String str; str = new String("Hello Dopza Club!"); System.out.println(str);
첫째 줄의 str은 클래스 String을 사용하여 객체를 선언한 것으로, 아직 이 str에 문자열이 할당되지 않았습니다.
따라서 여기서 str은 선언된 객체입니다.
둘째 줄은 new 키워드를 사용하여 메모리에 데이터를 생성시킨 것으로, 이 때 str은 생성된 인스턴스입니다.
In Java, objects can only be manipulated via references, which can be stored in variables.
자바는 변수에 저장될 수 있는 참조를 통하여 객체를 조작할 수 있습니다.
이렇게 객체를 실제로 메모리에 할당하는 과정을 인스턴스화(instantiate)라고 합니다.
즉 객체 str에 "Hello Dopza Club" 이라는 문자열을 할당해서 인스턴화한 것입니다.
이렇게 인스턴스화된 것이 바로 인스턴스 입니다.
객체변수를 선언한 후, new 연산자와 함께 생성자를 호출했을 때 완전한 인스턴스가 만들어집니다.
new 연산자는 객체의 메모리를 생성시켜 주는 역할, 즉 객체변수가 제대로 된 역할을 할 수 있게 객체의
메모리를 생성시켜 인스턴스로 만드는 역할을 합니다.
An object is an instance of a class created using a new operator.
객체(object)는 new라는 연산자(operator)를 사용하여 만들어낸 클래스의 인스턴스입니다.
When you create a new object, you use the new operator to instantiate the object.
새로운 객체를 만들 때, 객체를 인스턴스화 하기 위하여 연산자 new를 사용합니다.
www.dopza.com
'Java 배우기' 카테고리의 다른 글
Modifier 접근제한자 (0) | 2016.01.04 |
---|---|
Member field(variable) method 멤버 필드(변수) 메소드 (0) | 2016.01.04 |
Method 메소드 (0) | 2016.01.04 |
자바 쉬운 예제 (0) | 2016.01.04 |
참조 (reference)와 참조변수 (reference variable) (1) | 2016.01.03 |
댓글