프로그램 언어를 배울 때 한번에 모든 것을 이해하려고 하다보니 항상 지쳐 포기하게 되었다. 따라서 최선을 다해 이해하려고 노력하되, 이해하기 어려운 개념이 등장하면 '그냥 이런 것이 있구나' 정도로 생각하고 이후에 다시 개념을 보충하고자 한다.
절차 지향 언어인 C언어를 공부하다 객체 지향 언어인 자바를 접하게 되니 그 개념이 꽤나 생소했다.
따라서 자바의 운영구조를 이해하기 위해서 객체에 대한 이해가 가장 먼저 필요하다고 생각한다.
cf. [절차 지향/객체 지향 설명] https://velog.io/@kny99306/JAVADAY01230102
그후 자바의 구조에 대해 살펴보았는데 C언어와 비교하니 이해하기 수월했다.
이해하기 쉽게 예시를 한번 들어보자.
사람들이 자동차를 이용하기 위해서 자동차를 만들어야 한다.
이때 자동차를 만들기 위해서는 설계도면이 필요하다.
자바(java)라는 프로그램 개발언어를 사용하여 만드는 설계도면을
"클래스(class)" 라고 부르는 것이다.
클래스는 객체 생성을 위한 필드(field)와 메소드(method)로 구성된다.
이 설계도면, 즉 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
다시 한번 정리하자면,
개발자가 코딩(설계)를 통해 제작한 클래스(설계도)로 객체(자동차)를 만드는 것이다. 이때, 클래스로부터 객체(인스턴스)를 만드는 과정을 인스턴스화라고 한다.
하나의 클래스로부터 여러 개의 객체(인스턴스)를 만들 수 있는데, 이는 동일한 설계도로 여러 대의 자동차를 만드는 것과 동일하다.
사용하고자 하는 객체를 구상했다면, 객체의 대표 이름을 결정하고 이를 클래스 이름으로 한다.
ex) 사람 객체의 클래스명: Person / 자동차 객체의 클래스명: Car
클래스 이름 작성 규칙은 아래와 같다.
- 하나 이상의 문자로 이루어져야 한다.
ex) Car, SportsCar- 첫 번째 글자는 숫자가 올 수 없다.
ex) 3Car(X)- '$', '_' 외의 특수 문자는 사용할 수 없다.
ex) $Car(O), @Car(X), #Car(X)- 자바 키워드는 사용할 수 없다.
ex) int(X), for(X)
※ 자바는 영어 대소문자를 구분한다.
※ 관례상 클래스 첫 글자는 대문자로, 나머지는 소문자로 작성한다.
(근데 관례라곤 하지만 회사에서 안 지켜서 깨졌다는 경험담을 들었다..)
public class 클래스이름 {
}
이때 클래스 이름 뒤에는 반드시 중괄호 { }를 붙여준다.
일반적으로 소스 파일당 하나의 클래스를 선언한다. 하지만, 두 개 이상의 클래스 선언도 가능하다.
public class Car {
}
class Tire {
}
클래스를 선언한 뒤, 컴파일 했다면 객체를 생성할 설계도가 만들어 진 것이다.
(이클립스 사용시, 저장과 동시에 컴파일 진행됨)
클래스로부터 객체를 생성하기 위해서는 new 연산자를 사용한다.
new 클래스();
new는 클래스로부터 객체를 생성시키는 연산자이다.
new 연산자 뒤에는 생성자가 오는데, 생성자의 형태는 클래스() 이다.
(생성자는 이후 포스트에서 다루겠다.)
new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.
쉽게 설명하자면, 현실 세계에서 물건의 위치를 모르면 물건을 사용할 수 없듯이, 객체 지향 프로그램에서도 메모리 내에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없다.
new 연산자가 힙 영역에 객체 생성 -> 객체의 주소 리턴 -> 해당 주소를 클래스 변수(참조 타입)에 저장 -> 변수를 통해 객체 사용
클래스 변수;
변수 = new 클래스();
클래스 변수 선언과 객체 생성을 한 개의 실행문으로 작성할 수도 있다.
클래스 변수 = new 클래스();
자료구조 공부하기