클래스와 객체 그리고 인스턴스를 구별할 수 있는 개념 갖기.
이들 모두 가상 세계(JVM)에서 존재한다는 점
* 클래스와 객체를 구별하는 가장 중요한 것은 jvm 메모리에 생성되었는지 여부다.
* 클래스가 jvm의 메모리를 할당받아서 생성되었을 때 비로소 클래스에서 객체로 호칭이 변화된다.
* 클래스 파일이 JVM 위에서 실행될 때, JVM은 '.CLASS'바이너리 파일을 읽어들여 클래스 파일에 코딩된대로 실행한다.
* 이 때 파일의 이름과 클래스의 이름은 대소문자를 포함하여 반드시 일치해야 한다.
* JVM 메모리 위에 생성하기 위해서는 보통 다음과 같이 new라는 키워드를 사용한다.
클래스
- 객체의 목적이나 기능에 대해서 설명한 설계도
객체
- 데이터 혹은 기능을 갖고 있어 어떤 목적을 수행하는 것
- 하나의 클래스의 여러개의 객체를 생성할 수 있다.
- 클래스와 객체를 구별하는 가장 중요한 것은 JVM 힙(Heap) 메모리 영역에 생성되었는지 여부다.
인스턴스
- 인스턴스가 객체보다는 큰 의미임, 그러므로 객체는 인스턴스의 한 종류
- 그 객체가 메모리에 할당되어 실제 메모리를 차지하는 것을 인스턴스라고 한다.
String coffeeBean; // 데이터가 없는 비어있는 객체가 생성된 것
coffeeBean = new String("Arabica"); // 객체의 인스턴스화 한다.(객체를 실제로 메모리에 할당하는 과정)
클래스를 구성하는 메소드와 생성자, 그리고 속성
- 객체의 기능 = 클래스의 메소드 = ex) paint()
- 객체의 데이터 = 클래스의 속성 = 클래스 영역에 변수를 선언한 것 = ex) color, width
메소드
- 기본형태: [접근 제어자] [반환 데이터형] [메소드 이름]([매개변수])
- 접근제어자: public static void main(String[] args) 메소드에서 public과 static 키위드를 제어자라고 한다.
public 제어자가 접근제어자이며, static제어자는 메소드에 특별한 기능을 더해주는 역할을 수행
- 반환 데이터형: 반환값이 없으면 "반환 데이터형" 위치에 void
정수형: return 0; 문자열: return "return messege" void: return ;
- 메소드 사용방법
사용법: [클래스 이름][객체 이름] = new [생성자 이름]();
[변수형][변수 이름] = [생성된 객체이름].[메소드이름][매개변수]);
사용예: PersonSession persionSession = new PersonSession();
PersonValue personVo = personSession.selectByName("김병부");
- 먼저 메소드가 선언되어 있는 클래스를 인스턴스화해서 객체를 만들어야 한다. 인스턴스 과정을 거쳐야 JVM 메모리 위에 클래스 내용을 바탕으로 객체가 생성되기 때문.
* 꼭 위의 방법처럼 클래스를 객체로 만든 다음 메소드를 실행할 수 있는 것은 아니다. 가장 대표적인 예는 아ㅠ선 예제에서 코딩한 public static void main(String[] args) 메소드다. 이 메소드는 해당 클래스를 객체로 생성하지 않고 바로 실행할 수 있는 메소드다. 이런 기능은 main()메소드의 static 키워드가 그런 특수한 역할을 할 수 있도록 해준다.
객체를 생성하기 위한 특별한 메소드, 생성자
생성자(Constructor)
- 클래스를 생성할 때 생성자는 반드시 존재해야 한다.
- 다른 클래스에서 생성자와 이름이 같은 클래스를 호출할 때 new ~ 하면서 호출할거기 때문에 호출될 때 제일 먼저 실행 됨
- 클래스를 객체로 만들 때 JVM 힙 메모리에 데이터를 생성하는 인스턴스 과정에 사용되는 메소드의 한 종류로, new 키워드와 함께 호출된다. 만약 객체를 인스턴스하는 과정에 필요한 구문이 있는 경우에는 생성자 메소드의 실행부의 구현하면 된다. 이를 초기화라고 한다.
- 생성자에는 반환 데이터형이 없다.
- 생성자를 선언할 때 클래스 이름과 생성자의 이름은 반드시 같아야 한다.
- 생성자는 상속되지 않는다.
- 여러개의 생성자를 만들어도 상관없으나 매개변수의 개수와 데이터형이 중복되어서는 안된다.
- 메소드의 한 종류이지만 객체를 생성하는데 사용된다는 점
속성으로 객체의 상태 표현하기
- static String var1; // 클래스 변수: 선언위치는 클래스 내부이며 클래스가 최초에 로드될 때 생성된다.
- String var2; // 인스턴스 변수: 선언위치는 클래스 내부이며 객체가 생성될 때
- public void run() { String var3;} // 지역변수: 메소드 내부에서 선언되며 메소드가 실행될 때 생성된다.