병훈's Blog

[Java] 클래스와 객체 (Class and Object) 본문

Java

[Java] 클래스와 객체 (Class and Object)

thdqudgns 2022. 9. 25. 20:01

클래스와 객체 (Class and Object)

객체지향이라는 말. 많이 들어보셨나요?

지금부터 객체지향에 대해 알아볼 거예요.

클래스는 무엇이고, 객체는 무엇일까요?

 

클래스라는 공장에서 생성되는 것.

이것이 "객체" 입니다.

핸드폰 공장에서 핸드폰을 생산하고,

자동차 공장에서 자동차를 생산하듯이요.

 

클래스는 객체를 생산하기 위한 공장이에요.

이 공장에는 변수와 메소드가 있어요.

member 변수, member 메소드나

변수와 메소드를 통틀어 field라고도 부르죠.

변수와 메소드에 대해서는 다음에 알아볼 거예요.

일단 "클래스는 변수와 메소드로 구성되어있다." 만 기억해두세요.

 

클래스를 구성하고 있던 변수와 메소드대로

객체가 구성되어 만들어지는 거예요.

 

예를 들어 자동차 클래스에

변수로 "색, 문 개수, 크기" 가 있고,

메소드로는 자동차의 변수에 저장된 값을 반환하는 메소드가 있다고 해봐요.

 

이 클래스에서 생성된 여러 객체들 역시

각각 변수로 "색, 문 개수, 크기" 가 있고,

메소드로는 자동차의 변수에 저장된 값을 반환하는 메소드가 있는 거예요.

 

클래스를 하나 만들어 놓으면,

내가 원할 때, 원하는 만큼 객체를 만들어서

이 객체에 데이터를 저장하거나

객체의 기능(메소드)를 사용할 수 있는 거예요.

 

"객체" 말고 "인스턴스" 라는 용어도 사용하는데,

new로 객체가 실체화(인스턴스화) 되면 인스턴스라는 이름을 붙여요..

객체는 인스턴스를 포함하는 일반적인 의미랍니다.

클래스 --인스턴스화--> 인스턴스(객체)

 

코드로 객체가 생성되는 걸 보면 아래와 같아요.

Class var_name = new Class();

객체변수명(참조변수명)이라고 불리는 var_name은

인스턴스를 다루기 위한 리모콘이에요.

 

객체변수명(참조변수명)에 점을 찍어서
인스턴스의 변수와 메소드에 접근하기 때문이에요.

 

지금까지 설명한 내용들을 코드로 확인해볼게요.


Class Card{
    static int width = 100;    // 카드의 가로 (변하지 않는 공통속성)
    static int height = 250;   // 카드의 세로 (변하지 않는 공통속성)

    String kind;    // 카드의 무늬 (다이아, 스페이드, 하트, 클로버)
    int number;        // 카드의 숫자 (2~13)

    Card heart(Card c) {
        c.kind = "Heart";    // kind를 Heart로 바꾸고
        return c;    // c를 반환
    }
}

static 키워드에 대해서는 다음에 다룰 거예요.

여기서는 '그렇구나~' 하고 넘어가자구요.

위와 같은 클래스가 있을 때 Card card = new Card(); 를 한다면?

인스턴스가 생성된 후에 값을 저장하거나 꺼내오려면 점(' . ') 을 찍는다.

Card card = new Card();    // card 인스턴스(객체) 생성

card.kind = "Spade";    // card의 kind와 number에 값을 저장
card.number = 9;
System.out.print(card);    // card에 저장된 주소 0xaaaa가 출력
System.out.print(card.kind);    // Spade가 출력

card.heart(card);
System.out.print(card.kind);    // Heart가 출력

 

 

여러 개의 객체변수명이 하나의 인스턴스를 가리킬 수도 있다.

Card card1 = new Card();
Card card2 = new Card();
card1.kind = "Spade";
card2.kind = "Diamond";

card1 = card2;    // card2의 주소를 card1에 저장함으로써 card1도 card2 인스턴스를 가리키게 함

System.out.print(card1.kind);    // Diamond가 출력됨


첫 객체지향 공부 어땠나요?

생각보다 할만 하죠?

728x90
728x90

'Java' 카테고리의 다른 글

[Java] 초기화 (initialized)  (0) 2022.09.25
[Java] this  (0) 2022.09.25
[Java] 생성자 (Constructor)  (0) 2022.09.25
[Java] 메소드 오버로딩 (Method Overloading)  (0) 2022.09.25
[Java] 변수와 메소드 / JVM  (0) 2022.09.25