클래스와 객체

클래스객체를 정의해놓은 것이다 클래스를 사용하여 객체를 만든다.

보통 클래스는 못들어봤어도 객체라는 단어에는 익숙할 것이다.

객체는 말 그대로 '실제로 존재하는 것' 사물이 될수도 있고 혹은 무형의 어떤것이 될 수 도 있다.

이러한 객체는 클래스를 사용하여 만든다.

예시를 들어보자 우리가 사용하는 책이라는 것은 유형의(실제로 존재하는) 객체이다.

이를 만들기위해서는 책을 만드는 기계가 필요할 것이다. 이게 바로 클래스라는 존재이다.

객체지향이론 관점에서는 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 한다.

그리고 클래스로부터 만들어진 객체인스턴스라 한다.

즉, 객체는 책 그것을 만들기 위해 사용되는 것은 클래스는 책을 만드는기계이고

클래스(책을 만드는기계)로부터 만들어진 객체(책)은 인스턴스라하고, 이 과정을 인스턴스화라하고한다.

객체의 구성

객체는 두가지로 구성된다

  • 속성(property): 멤버변수, 특성, 필드...
  • 기능(function) : 메서드 , 함수 ...

속성은 예시로 들어서 설명하자면 객체를 구성하는 요소라고도 볼 수 있다.

예를들어서 책을 구성하는 종이 일 수 도있고, 책을 보호하는 북커버 이러한 것들이 속성이다

기능은 말 그대로 기능이다. 책을 예시로 들면 책장을 넘기는 것, 혹은 책갈피를 넣는것 이런것들이 된다.

// 예시

//속성-> 맴버변수(variable)
int pageNumber; // 총 몇 페이지인지?

//기능 -> 매서드
nextPage(); // 다음장으로 넘기는 매서드

//클래스의 예시

class Book {
    // 속성 -> 맴버변수들
    int pageNumber; // 페이지의 총수
    int nowPage; // 현재 페이지

    // 기능 -> 매서드
    void open(); // 책을 열기
    void close(); // 책을 닫기
    void nextPage(); // 다음장으로
}

인스턴스 생성 방법

위에처럼 class Book 즉 Book 이라는 클래스를 만든것은 기계를 만든것과 같다.

사용하기 위해서는 이책이 무엇인지 인스턴스화를 진행해야한다. 인스턴스화를 하는 방법은 다음과 같다.

클래스명 변수명 = new 클래스명();

Book onepice = new Book(); 

이러한 과정을 하면 Book클래스의 인스턴스가 메모리의 빈 공간에 생성이된다.

이러한 것들은 각 자료형에 해당하는 기본값으로 초기화 된다.

혹은 생성자를 만들어서 내가 원하는 값으로 초기화하거나 할 수도 있다.

빈공간이 생성되면서 onepice라는 참조변수에 생성된 객체의 주소값이 전달이 된다.

객체의 멤버변수나 매소드에 접근하기 위해서는 이제 참조변수.맴버변수처럼 .을 사용해야한다.

주의할점으로 같은 클래스로 인스턴스를 생성하면 값이 같은거라고 생각하는데 차이가 있다.

// book1 생성
Book book1 = new Book();

// book2 생성
Book book2 = new Book(); 

이때 book1과 book2의 pageNumber은 각각 다를 수 밖에 없다

왜냐하면 new를 통해서 새로운 메모리에 두번 생성했기 때문에

각각의 맴버변수는 다른 주소를 가지고 있기 때문이다.

객체 배열

많은 수의 객체를 다뤄야할 때 객체를 배열로 다룰수도 있다

// book1, book2, book3 생성
Book book1, book2, book3; 

// 배열을 통해 책 3권생성
Book[] bookArr = new Book[3];

이와같이 여러가지 객체가 많아진다면 생성하기가 힘들다.

이러한 객체를 배열을 통해서 생성하고 다룰수 있다.,

이러한 객체를 배열에 저장할때는 주의할 점이 있다.

사실 객체를 생성하였지만 객체를 생성한것이 아니라 객체 배열을 생성한 것이다

그렇기 때문에 각각의 bookArr[0], bookArr[1], bookArr[2]에 대해서는 객체가 생성되지 않았다.

그렇기 때문에 객체를 생성해서 배열의 각 요소에 저장해주는 과정을 더해줘야 한다.

//객체 배열 생성
Book[] bookArr = new Book[3];

// 방법 1
bookArr[0] = new Book();
bookArr[1] = new Book();
bookArr[2] = new Book();

// 방법 2
Book[] bookArr = {new Book(), new Book(), new Book()};

// 방법 3
for(int i = 0 ;i < bookArr.length; i++){
    bookArr[i] = new Book();
}

Reference

자바의 정석

'Java > Java' 카테고리의 다른 글

[Java/Study] 오버라이드  (0) 2021.09.07
[Java/Study] 상속  (0) 2021.09.07
[Java/Study] 생성자  (0) 2021.09.07
[Java/Study] 변수와 메서드  (0) 2021.09.07
[Java/Study] 자료형  (1) 2021.09.05

+ Recent posts