새소식

JAVA (개념, 알고리즘)

객체배열과 클래스

  • -

객체배열

객체 역시 배열로 다루는 것이 가능하다.

이때는 객채 배열 안에 객체가 저장되는 것이 아니라, 객체의 주소가 저장된다.

객체 배열은 참조 변수들을 하나로 묶은 참조변수 배열인 것이다.

 

Tv tv1, tv2, tv3; 과 같은 참조변수 tv1, tv2, tv3는 다음과 같이 간단하게 생성할 수 있다.

Tv[] tvArr = new Tv[3];

이 배열 tvArr의 각 요소는 참조변수의 기본값인 null로 자동 초기화된다.

이 객체 배열은 3개의 객체(정확하게는 객체의 주소)를 저장할 수 있다.

 

객체 배열을 생성하는 것은 그저 객체를 다루기 위한 참조변수들이 만들어진 것일 뿐,

아직 객체가 저장되지는 않았다.

객체를 생성해서 객체 배열의 각 요소에 저장하는 것을 잊으면 안 된다. 

 

// 참조변수 배열(객체 배열)을 생성.
Tv[] tvArr = new Tv[3]; 

//객체를 생성해서 배열의 각 요소에 저장.
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

//위 문장은 for문으로도 가능하다.
Tv[] tvArr = new Tv[100]; // 이라고 가정한다면,

// for문으로 새로운 객체를 생성할 수도 있다.
for(int i=0; i<tvArr.length; i++)
	tvArr[i] = new Tv();

 

 

클래스

자바와 같은 객체지향언어에서는 변수(데이터)와 함수를 하나의 클래스에 정의하여

서로 관계가 깊은 변수와 함수들을 함께 다룰 수 있게 했다.

즉, 서로 관련된 변수들을 정의하고 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것이 바로 클래스다.

C언어에서는 문자열을 문자의 배열로 다루지만, 자바에서는 String이라는 클래스로 문자열을 다룬다. 

class Time {
	int hour;
    int minute;
    float second;
}

사용자 정의 타입을 이용하여 서로 관련된 변수들을 묶어서 하나으 타입으로 새로 추가할 수 있다.

 

 

- 클래스 안의 변수

(1) 인스턴스 변수

인스턴스 생성할 때 만들어진다. 따라서 인스턴스 변수값을 읽어오거나 저장하려면 먼저 인스턴스를 생성해야 한다.

스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다.

인스턴스마다 고유한 상태를 유지해야 하는 경우, 인스턴스 변수로 선언한다.

(2) 클래스 변수

인스턴스 변수 앞에 static만 붙여주면 된다.

인스턴스마다 독립적인 저장공간을 갖는 인스턴스 변수와는 달리,

클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다.

한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 경우, 클래스 변수로 선언한다.

클래스 변수는 인스턴스 변수와 달리 인스턴스를 생성하지 않고 언제라도 바로 사용할 수 있는

특징이 있으며, '클래스 이름.클래스 변수'와 같은 형식으로 사용한다.

 

그럼 static을 언제 붙여야 할까?

1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.

2. 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.

3. 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.

4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다. (인스턴스 변수를 필요로 한다면, static을 붙일 수 없다. 반대로 인스턴스변수를 필요로 하지 않는다면, static을 붙이자.

Static을 붙이게 되면 메서드 호출 시간이 짧아지므로 성능이 향상된다.

'JAVA (개념, 알고리즘)' 카테고리의 다른 글

오버라이딩과 오버로딩  (0) 2022.12.28
상속과 포함관계  (0) 2022.12.28
생성자  (0) 2022.12.22
[JAVA] 타입 간의 변환방법  (0) 2022.12.21
[JAVA] 문자와 문자열 알아보기  (0) 2022.12.21
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.