♦ 자바의 클래스와 객체생성
자바에서는 모든 객체가 클래스로 정의된다.
클래스 형식
[지정자] class 클래스명 { [생성지] [인스턴스 변수] [메소드] }
지정자(modifier)
지정자는 특정 목적을 위해서 사용하는 키워드를 의미한다. 생략이 가능하며 일반 지정자와 접근 지정자가 있다.
1. 일반 지정자(modifier) : static, final, abstract
2. 접근 지정자(access modifier) : private, protected, default(friendly), public
인스턴스 변수(instance variable)
클래스를 통해서 객체 생성된 인스턴스에 필요한 데이터를 저장하는 곳이다. 멤버변수 라고도 하며 클래스를 인스턴스(객체 생성)화 할 때마다 메모리에 새로 생성이 된다.
인스턴스 변수
[지정자] 데이터형 변수명;
지정자는 일반 지정자와 접근 지정자 모두 사용 가능하다. 변수명은 소문자로 지정한다.
메소드(method)
인스턴스 변수에 저장된 데이터를 수정, 조회하는 용도로 사용되며, 클래스를 인스턴스화 할 때마다 생성되지 않고 공유해서 사용된다. 메소드는 인스턴스 변수와는 다르게 자동으로 수행되지 않고 반드시 클래스 객체 생성 후에 호출작업을 해야 동작한다.
메소드는 반드시 호출되어야 수행되는 동작 방식이기 때문에 호출하는 메소드(caller)와 호출 당하는 메소드(worker)가 존재한다.
caller 메소드
특정 동작을 수행하는 메소드를 호출하는 메소드
worker 메소드
caller 메소드에 의해 호출되어 특정 작업을 수행하는 메소드이다. worker 메소드는 역할에 따라서 다음 2가지로 구분된다.
1. setter 메소드 : 인스턴스 변수에 저장된 데이터를 수정할 목적으로 사용되며 메소드 이름은 ‘set변수명’ 으로 지정한다.
2. getter 메소드 : 인스턴스 변수에 저장된 데이터를 조회할 목적으로 사용되며 메소드 이름은 ‘get변수명’ 으로 지정한다.
ex) student 클래스
public class Student { String name; public String getName() { return name; } public void setName(String n) { name = n; } }
main 메소드
일반적으로 메소드는 호출되어야 실행되지만 main 메소드는 호출되지 않아도 실행될 수 있는 유일한 메소드이다.
main 메소드는 자바 프로그램의 시작점으로 자동으로 실행되며, 나머지 필요한 메소드를 호출하는 역할을 한다. 하나의 프로그램에서 main 메소드를 가진 클래스는 반드시 존재하며 반드시 하나만 존재할 수 있다.
main 메소드
public static void main(String [] args){ }
생성자(constructor)
인스턴스 변수를 초기화하는 역할을 한다. 리턴타입이 없고 클래스명으로 생성자 이름을 지정해야 한다.
생성자
[접근지정자] 클래스명([인자]){ }
기본생성자(default constructor)
개발자가 명시적으로 생성지를 지정하지 않으면 자동으로 기본 생성자가 생성된다.
기본생성자
[접근지정자] 클래스명(){}
객체 생성
클래스를 정의한 후에는 반드시 개체생성 작업을 해야 사용할 수 있다. 객체생성은 new 키워드와 함께 생성자를 호출하는 작업이다.
객체 생성후 생성 위치를 참조형 변수에 저장
클래스형 변수명 = new 클래스형([값]);
new 클래스형(값); 부분이 생성자를 호출하는 코드이다. [값]을 저장할 수 있는 인자가 있는 생성지를 호출하거나, 기본 생성자를 호출할 수 있다.
new 를 이용해서 생성자를 호출하면 클래스의 멤버(인스턴스 변수, 메소드)가 메모리에 생성된다. 메모리에 생성된 멤버에 접근하기 위해서 생성 위치정보를 변수명에 저장한다. 이 변수를 참조형 변수(reference variable)라 한다.
클래스 사용순서
객체생성 ⇒ 생성 위치를 참조형 변수에 저장 ⇒ 참조형 변수를 이용하여 클래스 멤버에 접근
클래스의 멤버(인스턴스 변수, 메소드)에 대한 접근 형식
클래스형 참조형변수 = new 클래스형([값]); 참조형변수.인스턴스변수; 참조형변수.메소드명([값]);
student 클래스의 멤버에 대한 접근
public class Test01 { public static void main(String[] args) { Student student = new Student(); student.setName("홍길동"); String name = student.getName(); System.out.println(name); } }