OOP 개념: 객체 생성과 필드 참조 연산자
이번 글에서는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나인 '객체 생성과 필드 참조 연산자'에 대해 더욱 깊이 이해하기 위해, 이번 글에서는 이 두 가지 개념을 자세히 살펴보도록 하겠습니다.
1. 객체 생성 (Object Creation)
객체 지향 프로그래밍에서 '객체'는 클래스의 인스턴스를 의미합니다. 클래스는 특정한 종류의 객체들이 가져야 할 속성과 행동을 정의한 설계도나 청사진 같은 것입니다. 그러나 클래스 자체는 아무런 데이터도 저장하지 않습니다. 실제로 데이터를 저장하려면 클래스로부터 객체를 생성해야 합니다.
Java와 같은 언어에서는 `new` 키워드를 사용하여 새로운 객체를 생성합니다. 예시 코드:
Dog myDog = new Dog();
위 코드에서 `new` 키워드는 메모리에 새로운 공간을 할당하고, 그 공간을 초기화하여 Dog 타입의 새로운 객체(인스턴스)를 만듭니다. 그리고 `=` 연산자는 해당 메모리 공간의 주소값(참조값)을 `myDog` 변수에 할당합니다.
이렇게 생성된 객체는 독립적인 메모리 공간에 위치하며, 해당 클래스가 정의한 모든 필드와 메서드를 가지게 됩니다. 따라서 여러 개의 Dog 객체가 있더라도 각각 다른 이름, 나이 등을 가질 수 있으며 서로 영향을 주지 않습니다.
2. 필드 참조 연산자 (Field Reference Operator)
필드 참조 연산자인 점(`.`)은 각각의 객체 내부에 있는 필드나 메서드에 접근하는 데 사용됩니다.
예시 코드:
myDog.name = "Bingo";
myDog.age = 3;
위 예제에서 점(`.`)은 myDog라는 이름의 Dog 객체 내부에 있는 name과 age라는 필드에 직접 접근하여 값을 할당하는 역할을 합니다.
필드 참조 연산자 없이 name 또는 age 필드에 직접 접근하려 하면 컴파일 오류가 발생합니다. 왜냐하면 name과 age 필드는 Dog 클래스 안에서만 정의되었기 때문입니다.
필드 참조 연산자와 함께 사용되면, 우리가 작성한 코드가 어느 위치든 간에 해당 인스턴스의 필드나 메서드에 접근할 수 있습니다. 이를 통해 객체의 상태를 변경하거나, 객체가 제공하는 기능을 활용할 수 있습니다.
myDog.bark();
위 예제에서는 myDog 객체의 bark() 메서드를 호출하여 'Bingo'라는 이름을 가진 강아지가 짖도록 만들었습니다. 이처럼 필드 참조 연산자는 객체 내부의 필드뿐만 아니라 메서드에도 접근할 수 있게 해 줍니다.
3. 메모리와 참조
객체 생성과 필드 참조 연산자를 이해하기 위해서는 컴퓨터 메모리와 참조 개념에 대한 이해가 중요합니다. 컴퓨터 프로그램은 실행되기 위해 메모리 공간을 사용하며, 여기에 변수나 데이터, 함수 등이 저장됩니다.
객체 지향 프로그래밍에서 객체 생성은 사실상 메모리 공간을 할당하는 것입니다. 클래스 정의에 따라 필요한 만큼의 공간이 할당되며, 각 필드와 메서드 정보가 그 안에 저장됩니다.
그리고 이렇게 생성된 객체는 고유한 주소값(참조값)을 가지게 됩니다. 변수가 이 주소값을 저장함으로써 해당 객체를 '참조'하게 되며, 필드 참조 연산자를 통해 해당 주소 위치에 있는 데이터나 함수에 접근할 수 있습니다.
4. 결론
객체 지향 프로그래밍에서 클래스로부터 실제 사용 가능한 '객체'를 생성하고, '.' 연산자로 그 안의 속성이나 동작에 접근하는 것은 매우 중요합니다.
이런 방식으로 데이터와 함수(메서드)가 하나로 묶여있다 보니 코드 관리가 용이하고, 재사용성과 확장성이 높아집니다. 또한 실제 세계 문제를 소프트웨어로 모델링하는데 있어 OOP는 매우 유용합니다.
실세계에서 우리는 각기 다른 속성과 행동을 가진 수많은 개체들을 다룹니다 - 사람들, 동물들, 자동차, 건물 등. 이런 개체들을 클래스와 객체라는 개념으로 모델링함으로써 소프트웨어가 현실 세계를 더욱 정확하게 반영할 수 있게 됩니다.
이처럼 객체 지향 프로그래밍의 핵심 개념인 '객체 생성과 필드 참조 연산자'를 이해하면, 우리는 데이터와 함수를 효과적으로 조직화하고 관리하는 방법을 배울 수 있습니다.