① Class의 개념
Step 1. Object modeling, 설계를 위한 생각
구현하고자 하는 객체를 속성과 기능으로 나누어 설계한다.
※ Object modeling은 속성과 기능을 정의해야 하기 때문에 domain knowledge가 없으면 설계할 수 없다.
Step 2. 클래스
클래스란 객체를 생성하기 위한 설계도와 같은 개념이다. 클래스는 객체의 속성(변수)과 기능(메서드)을 정의하며, 객체의 데이터 타입을 정의한다. 클래스는 객체를 생성하기 위한 틀이라고 볼 수 있다.
Step 3. 인스턴스
인스턴스란 객체를 생성한 후, 해당 객체를 가리키는 참조 변수를 의미한다. 인스턴스는 객체를 생성하기 위해 new 연산자로 생성된 것을 가리키는 변수로서, 인스턴스를 통해 해당 객체의 변수 메서드를 사용할 수 있다. 생성된 인스턴스가 붕어빵이라면 클래스는 붕어빵 틀과 같다.
정리하자면 object, class, instance는 결국 다 같은 개념이지만 존재하는 위치만 다르다. Object는 내가 머릿속으로 가지고 있는 것, Class는 내 모니터나 종이 위에 적힌 코드, instance는 메모리에 생성된 것이다.
Class는 실행 코드로 보지 않으며 메모리에 클래스를 올리는 생성 과정(인스턴스화)을 거쳐야 한다. 클래스를 어떻게 인스턴스로 생성하는지는 언어마다 다르지만, java에서는 아래와 같이 new라는 연산자를 사용한다.
Car myCar = new Car();
new 연산자를 통해 메모리에 클래스를 올려 객체를 생성하는데, 이때 유니크한 주솟값을 받아온다. 주솟값은 어떤 데이터 타입으로 받을 수 있을까?
② Data Type
Chapter 2에서 학습했던 데이터 타입은 기본 데이터 타입(primitive type)인데, 자바에는 기본 데이터 타입(primitive type)과 참조형(reference type) 두 가지 타입이 있다. 기본 데이터 타입은 정수, 실수, 논리값 등의 값을 직접 저장하며 참조형은 객체의 주소를 저장한다. 자바에서 제공하는 대표적인 참조형 타입은 다음과 같다.
1. 클래스(class) 타입
클래스는 객체를 생성하기 위한 템플릿으로, 객체의 속성과 메서드를 정의한다. 클래스는 new 연산자를 사용하여 객체를 생성하고, 참조형 변수에 객체의 주소를 저장한다.
2. 인터페이스(interface) 타입
인터페이스는 객체의 동작을 정의하는 데 사용된다. 인터페이스는 클래스와 달리, 객체를 직접 생성할 수 없으며, 인터페이스를 구현한 클래스의 객체를 생성하여 사용한다.
3. 배열(array) 타입
배열은 동일한 타입의 데이터를 저장하는 자료구조이다. 배열은 참조형 변수에 배열의 주소를 저장한다.
4. 열거형(enum) 타입
열거형은 상숫값을 정의하는 데 사용된다. 열거형은 클래스와 비슷한 형태로 정의하며, 열거형 상수는 고정된 순서를 가지고 있다.
참조형 변수는 다음과 같이 선언하여 사용된다.
reference_type reference_variable = new ClassName();
※ C언어의 포인터는 주소를 따라가면 함수, 배열, 변수, 주소, 구조체 등이 나올 수 있지만, 객체지향 언어에서 reference 변수는 주소를 따라가면 무조건 인스턴스만 나온다.
※ 객체지향에서 “.”이 있으면 “.” 앞은 무조건 객체의 참조 변수이고, 주소를 따라가면 인스턴스, 인스턴스 내부에는 변수와 메서드뿐이다.
③ Naming Rule
java에서는 Camel Rule을 따른다.
1. 클래스 이름은 첫 글자를 대문자로 한다.
2. 변수와 메서드는 첫 글자를 소문자로 한다.
3. 상수는 Full name을 대문자로 한다.
4. 두 개 이상의 단어일 때 클래스는 각 단어의 앞 글자를 모두 대문자로 한다.
5. 두 개 이상의 단어일 때 변수와 메서드는 첫 글자만 소문자, 그 이후는 대문자로 한다.
위의 Rule을 지키는 것은 여러 개발자가 공동으로 개발할 때 굉장히 중요하다.
'JAVA' 카테고리의 다른 글
[JAVA] Chapter 7. Class (3) (0) | 2023.07.09 |
---|---|
[JAVA] Chapter 7. Class (2) (0) | 2023.07.08 |
[JAVA] Chapter 6. Method (0) | 2023.07.06 |
[JAVA] Chapter 5. Control (0) | 2023.07.05 |
[JAVA] Chapter 4. Operator (0) | 2023.07.04 |
댓글