충분히 쌓여가는
객체와 참조 본문
실 세계의 한 대상을 모델한 클래스를 이용하려면 객체를 생성해야됨
필요에 따라 한 클래스로부터 여러 개의 객체들을 생성할 수 있음
이 객체들을 서로 구별할 수 있어야 하고 이를 위해 참조형 변수를 사용함
참조형 변수는 가리키는 객치의 참조(reference)를 저장함
참조는 가리키는 개체의 주소
객체 생성하는 과정
- 자바에서 변수는 기본형인 경우: 값 자체를 저장, 참조형인 경우: 가리키는 객체의 참조 값(주소)를 저장함
- 기본형 변수들 같이 참조형 변수도 사용하기 전에 선언해야 함
- 한 객체를 정의하기 위해 사용되는 클래스가 그 객체의 데이터형이 됨
int number;
String name;
- 첫 번째 선언문은 정수 값을 저장하는 변수를 만듬
- 두 번째 선언문은 한 String 객체를 가리키는 참조 값을 저장하는 String 형 변수를 만든다
- 참조형 변수는 객체 자체를 저장하지 않고 객체의 주소를 저장함
- 정의된 두 변수들은 처음에 어떤 값을 저장하지 않는다
- 참조형 변수는 null로 초기화 될 수 있음(null: 자바의 예약어)
- 한 참조형 변수가 null 값을 가지는 것은 그 변수가 어떤 객체도 가리키지 않는다는 것을 의미함
- 모든 변수는 항상 사용하기 전에 초기화되어 있는지를 확실히 하는 것이 중요함
- 참조형 변수의 경우 사용하기 전에 유효한 객체를 가리키고 있는지 확인해야한다
- 대부분의 상황에서 변수를 초기화하기 전에 사용하려고 시도하면 컴파일러는 오류를 만들어냄
- 위 코드에서 String 형 참조 변수인 name 을 선언했지만, 실제로 어떤 String 객체도 존재하지 않는다
- 객체를 생성하는 것은 실례 만들기(instantiation)라고 부름
- 한 객체는 특정 클래스의 한 실례(instance)라고 부름
- 객체를 생성하기 위해 new 연산자를 사용할 수 있다
- new 연산자는 새 객체의 주소를 반환
number = 75
name = new String("홍길동");
- 두 배정문들은 위에서 연산한 두 변수들에게 값을 줌
- new 연산자가 객체를 생성한 후 생성자 메소드가 그 객체의 변수(들) 값을 초기화하기 위해 호출됨
- 생성자 메소드: 클래스와 같은 이름을 가지는 특별한 메소드
- 참조형 변수는 객체의 주소를 저장하기 때문에 객체가 저장되어 있는 메모리 위치에 대한 지시자(pointer)로 여겨질 수 있다
- 숫자 형태의 주소를 보여줄 수 있지만 실제 주소 값을 부적절함
- 위 문들이 실행될때마다 실제 주소 값이 다르기 때문
- 중요한 것은 참조형 변수는 특정 개체를 가리킨다는 사실
마침표(.) 연산자
- 마침표 연산자는 참조 변수 바로 다음에 나옴
count = name.length();
- name 변수가 가리키는 String 객체의 문자열 길이를 알기 위해 String 클래스 내에 정의된 length 메소드를 호출함
- length 메소드는 매개 변수가 없음
- length 메소드는 한 문자열 내에 있는 문자들의 수를 계산하여 반환함
Account 클래스
public Account(String name, int number, int amount)
{
setOwnerName(name);
setAccountNumber(number);
setBalace(amount);
}
- Account 클래스이 객체를 생성할 때 예금주 이름, 계좌번호, 잔고의 값을 각각 매개 변수의 값으로 초기화하는 생성자 메소드를 추가함
- 생성자 메소드의 이름은 클래스의 이름과 같음
- 각 객체 변수의 값을 주어진 매개 변수의 값으로 초기화하기 위해서 Account 클래스 내의 적절한 변경자 메소드를 이용할 수 있음
- 즉, 예금주 이름을 주어진 매개 변수의 값으로 초기화하기 위해 setOwnerName 메소드를 그 매개 변수의 값을 가지고 호출함
Account 객체를 가리킬 수 있는 변수 선언
Account acct;
- Account 클래스로부터 생성되는 Account 객체를 가리킬 수 있는 acct 라는 참조 변수 선언함
- 그러나 Account 객체는 생성하지 않음
- -> acct는 어떤 Account 객체도 가리키지 않는다
참조변수가 객체를 가리키게 하기 위해 객체를 생성한 후 그 객체를 가리키게 함
acct = new Account();
- 배정문의 오른쪽에 있는 연산식 new 연산자 다음 Account 클래스의 기본 생성자 메소드 호출문 Account()로 구성되어 있음
- new Account() 연산식은 하나의 Account 객체를 생성하고 그 객체의 주소를 반환함
- 이 경우 기본 생성자 메소드가 호출되어 객체 변수들은 기본 값들을 가짐
- 즉, 정수형 변수는 0이라는 기본값을, 참조형 변수는 null 값 가짐
- 따라서 위 배정문은 acct 변수가 새로 생성된 Account 객체의 주소를 저장함
- 즉, acct는 새로 생성된 Account 객체를 가리킴
- 생성된 객체는 대응하는 클래스에서 정의된 모든 객체 변수들의 고유한 사본(copy)를 가짐
- 해당 클래스에서 정의된 모든 메소드는 모든 객체들 사이에 공유됨
'Java' 카테고리의 다른 글
StringBuilder (0) | 2023.02.06 |
---|---|
생성자 메소드(Default constructor) (0) | 2023.02.06 |
메소드 다중 정의(method overloading) (3) | 2023.02.04 |
접근자 메소드(get method) / 변경자 메소드(set method (1) | 2023.02.04 |
접근 수정자(Access Modifier) public / private (0) | 2023.02.03 |