프로그래밍 언어/JAVA

자바 클래스와 인스턴스

원원 2017. 11. 21. 19:05

안녕하세요. 오늘은 자바의 클래스와 인스턴스에 대해 알아보겠습니다.

클래스(Class) = 데이터(Data) + 메소드(Method) 

인스턴스(객체) = 클래스에서 만들어진 것

비유해서 말하자면 클래스란 붕어빵 틀이고 인스턴스(객체)란 붕어빵입니다.

붕어빵 틀이 있어서 붕어빵 만들기가 매우 쉽습니다. 그냥 틀에 반죽 넣고 팥넣고 다시 넣으면 완성됩니다.

그러나 붕어빵 틀이 없다면 붕어빵 만들기가 매우 힘들겠죠..

이처럼 클래스와 인스턴스가 그런 사이입니다.




클래스란


처음 자바프로젝트를 만들면 아래와 같은 코드가 생성되는데요.

main클래스와 main함수가 생성됩니다.

이 처럼 클래스는 데이터와 메소드의 모임입니다.


1
2
3
4
5
6
public class main {
 
    public static void main(String[] args) {
 
    }
}
cs



아래의 코드는 실제로 클래스에 데이터와 메소드를 사용한 모습입니다.

클래스 = main

데이터 = Price

메소드 = main,addPrice,checkPrice

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class main {
    static int Price = 200; //초기 붕어빵 가격
 
    public static void main(String[] args) {
        addPrice(1000);
        checkPrice();
    }
    
    //붕어빵 가격 올리기
    static void addPrice(int m) {
        Price += m; // Price = m + Price;
    }
    
    //붕어빵 가격 보기
    static void checkPrice() {
        System.out.println("붕어빵 가격 : " + Price);
    }
 
}
cs
결과물
붕어빵 가격 : 1200




인스턴스란

위에서 설명했듯이 붕어빵과 같다 했습니다. 실제로 클래스로 틀을 만들고 인스턴스를 만들어 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class bread {
 
    int Price = 200;
 
    // 붕어빵 가격 올리기
    void addPrice(int m) {
        Price += m; // Price = m + Price;
    }
 
    // 붕어빵 가격 보기
    void checkPrice() {
        System.out.println("붕어빵가격 : " + Price);
    }
}
cs

bread이라는 클래스입니다. 붕어빵 틀의 역할을 하고 이제 메인함수에서 이 클래스를 이용해서 인스턴스를 만들겠습니다.


1
2
3
4
5
6
7
8
9
public class main {
 
    public static void main(String[] args) {
        bread br = new bread();
        br.addPrice(1000);
        br.checkPrice();
    }
 
}
cs
결과물
붕어빵 가격 : 1200

4번째 줄의 mW를 참조변수라고 합니다. 이 참조변수는 키워드new를 통하여 인스턴스를 생성하면 생성된 인스턴스의 주솟값이 바놘됩니다.

즉 참조변수에는 인스턴스의 주솟값이 저장되게 됩니다.




생성자란

이제 바나나맛붕어빵, 초코맛붕어빵을 만들어 보겠습니다. 그러면 인스턴스를 만들고 붕어빵 이름을 정하면 되는데요, 그렇게 하지 않고 인스턴스를 만들

면서 붕어빵 이름을 정할 수 있습니다.(생성자)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class bread {
 
    int Price = 0;
    String name;
 
    public bread(String n, int p) {
        name = n;
        Price = p;
    }
 
    // 붕어빵 가격 올리기
    void addPrice(int m) {
        Price += m; // Price = m + Price;
    }
 
    // 붕어빵 가격 보기
    void checkPrice() {
        System.out.println(name + "붕어빵 가격: " + Price);
    }
}
cs

1
2
3
4
5
6
7
8
9
10
11
public class main {
 
    public static void main(String[] args) {
        bread brBanana = new bread("바나나맛"1000);
        brBanana.checkPrice();
 
        bread brChoco = new bread("초코맛"2000);
        brChoco.checkPrice();
    }
 
}
cs

결과물

바나나맛붕어빵 가격: 1000

초코맛붕어빵 가격: 2000


main함수의 4번,7번째 줄을 보면 인스턴스를 만들 때 전달인자로 "바나나맛" , 1000을 전달하고 있습니다. 이 값들은 생성자가 호출될 때 생성자의 매개변수로 전달됩니다.

bread함수의 6번째 줄이 생성자입니다. Price변수와 name변수에 전달받은 값을 저장하고 있습니다.


생성자를 따로 안 만들었을 때 사실 생성자가 존재 합니다. 자바 컴파일러가 '디폴트 생성자'를 넣어줍니다. 또한 생성자는 오버라이딩이 가능합니다.

(생성자의 호출이 생략된 인스턴스는 인스턴스가 아닙니다)