본문 바로가기

IT/Java

클래스, 객체, 인스턴스, 메소드, 생성자 개념

클래스와 객체 그리고 인스턴스를 구별할 수 있는 개념 갖기.

이들 모두 가상 세계(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;}     // 지역변수: 메소드 내부에서 선언되며 메소드가 실행될 때 생성된다.