자바의 객체지향
자바는 대표적인 객체지향적 언어입니다. 그렇기 때문에 class를 인스턴스로 만들어 객체를 생성하고 사용합니다. 객체지향을 띄고 있기 때문에 자바로 만든 소스 역시 빠르고 쉽게 유지보수가 가능합니다.
객체가 뭘까
어떤 행동이 이뤄지기 위해서는 대상이 필요합니다. 이때 이 대상이 객체입니다. 객체들은 서로 상호작용하며 더 큰 움직임을 만들어냅니다.
사람은 밥을 먹기도 하고 자동차를 타기도 합니다. 또는 걸어서 슈퍼에 가기도 합니다. 이때 사람, 밥, 자동차, 슈퍼가 객체가 됩니다.
Class
자바에서는 객체를 class로 표현합니다. 클래스는 간단히 말하면 1개의 자바 파일입니다. 이 자바파일에는 클래스의 특성을 나타내는 멤버변수와 동작을 나타내는 메서드가 들어갈 수 있습니다.
사람이라는 클래스를 만든다고 했을 때 멤버변수는 이름, 혈액형, 집주소 등이 될 수 있습니다. 멤버변수는 다른 말로 속성(property) 또는 특성(attribute)등으로 말하기도 합니다.
또한 사람이라는 클래스를 만든다 했을 때 메서드는 먹다, 타다, 잡다 등이 될 수 있습니다. 메서드는 더 긴 설명이 필요할 수 있으므로 나중에 다시 이야기를 하도록 하겠습니다.
클래스를 생성하기 위해서는 먼저 class예약어를 사용한 뒤 클래스 이름을 지어주는 방식으로 합니다. 예를 들어 사람이라는 클래스는
package test;
public class Person {
멤버변수;
메서드;
}
이런 형식으로 작성할 수 있습니다. 여기서 test는 패키지 명 입니다. class예약어 다음에 클래스 명을 쓸 때 첫문자를 대문자로 사용한 것은 개발자 들 사이의 규칙입니다.
소문자를 사용한다고 에러가 나오지는 않지만 다른 것들과 혼동되는 경우가 발생하기 때문에 첫 문자를 대문자로 쓰도록 규칙을 정하고 있습니다.
인스턴스
자바를 배울 때 객체라는 말과 인스턴스라는 말은 쉽사리 와닿지 않는 경우가 많습니다. 인스턴스는 클래스가 메모리에 올라간 상태입니다. 이렇게 말해도 와닿지 않을 것입니다.
우리가 객체지향적 프로그래밍을 하는 이유는 '쉽게' 개발하기 위해서입니다. 어떻게 쉽게 개발하는 것이냐면 바로 1개의 코딩을 해놓으면 그것을 복제해다가 동일 특성의 새로운 클래스를 무한대로 찍어내서 사용하는 것입니다.
예를 들어서 최초 Person이라는 클래스를 만들었다면 김땡땡이라는 이름의 클래스, 박땡땡이라는 클래스, 왕땡땡이라는 클래스등을 계속 찍어내서 사용할 수 있다는 것입니다.
이때 찍어냈다는 말은 곧 생성되었다는 것이고 이는 컴퓨팅 관점에서는 메모리에 올라갔다는 것입니다. 다시 말해서 한번 만들어진 클래스는 특정 코드를 통해 새롭게 만들어낼 수 있고 이렇게 만들어진 상태를 인스턴스라고 합니다.
인스턴스가 '즉석'이라는 의미로 사용된다는 것도 비슷하게 이해할 수 있습니다. 처음 한번만 클래스를 만들고 나면 그 다음부터는 엄청나게 긴 코드를 작성하지 않더라도 손쉽게 즉석에서 클래스를 만들어낼 수 있기 때문입니다.
객체, 클래스, 인스턴스는 조금씩 의미가 섞여있으며 평소에도 명확한 구분으로 쓰지 않는 경우가 있기 때문에 혼동되는 경우가 많습니다.
정확히는, 객체는 어떤 대상이고 이것을 코드로 구현한 것이 클래스입니다. 그리고 이 클래스는 찍어낼 수 있는데 이렇게 메모리에 올려서 찍어낸 상태를 인스턴스라 합니다. 그런데 인스턴스를 "클래스를 생성해라" 또는 "객체를 만들어라"등의 말로도 사용하는 사람이 많아서 혼동이 발생하기 시작하는 것입니다.
인스턴스 만들기
인스턴스를 만든다는 것은 클래스를 힙 메모리에 올려서 사용한다는 것입니다. 이렇게 힙 메모리에 올리려면 생성자를 호출해야 합니다.
클래스에는 모두 생성자가 들어가 있는데 직접 입력하지 않더라도 자바에서 자동으로 디폴트 생성자를 넣어주기 때문에 눈에 보이지 않는 경우도 있습니다.
이제 생성자와 예약어 등을 이용해서 인스턴스를 만들도록 하겠습니다.
Person kim = new Person();
이 코드를 살펴보도록 하겠습니다. Person이라는 클래스 자료형으로 kim이라는 변수를 선언했습니다. 동시에 new라는 예약어를 사용했고 Person()이라는 생성자를 호출했습니다.
어떤 일이 발생하는지 알아보겠습니다. new예약어를 사용했기 때문에 Person()생성자가 호출되는 동시에 클래스가 힙메모리에 올라갑니다(인스턴스를 여러개 만들면 힙 메모리에 여러개 올라갑니다). 그렇게 올라간 클래스는 Person자료형 kim이 참조할 수 있도록 연결됩니다.
이때 주의할 점은 kim은 스택메모리에 있다는 것입니다. 스택메모리에 있는 kim이 힙 메모리에 있는 Person클래스를 참조할 수 있습니다.
이렇게 인스턴스를 만들고 나면 인스턴스의 멤버변수와 메서드를 참조하여 사용할 수 있습니다. 바로 참조변수를 사용해서 가능합니다. 인스턴스 멤버변수로 name이 있다고 해보겠습니다.
kim.name = "김땡땡"
이렇게 하면 인스턴스의 name이라는 변수는 김땡땡이라는 것을 갖게 됩니다. 이때 사용한 kim이 참조변수입니다. 참조변수를 사용하려면 위에서 본 듯이 참조변수+.+멤버변수 식으로 사용해야합니다.
메서드를 사용하는 것도 동일합니다.
'IT정보 > 자바 기초' 카테고리의 다른 글
[개념이해] 추상메서드, default메서드, static메서드, private메서드 (0) | 2022.02.20 |
---|---|
[개념이해] 멤버변수(인스턴스 변수), 지역변수(로컬변수), static변수(클래스변수), 참조변수, 매개변수 (0) | 2022.02.20 |
[개발환경] 자바 IDE (통합개발환경) 이클립스 (0) | 2022.02.18 |
[개발환경] 자바 설치 Java Development Kit(JDK) (0) | 2022.02.18 |
[기본개념] 자바란 무엇일까? 특징은 무엇일까? (0) | 2022.02.18 |
댓글