2014. 11. 10. 01:58ㆍBasic/etc
1. 참조(reference) 타입
자바의 자료형은 크게 기본형(boolean, byte, short, char, int, long, float, double)과 참조 타입으로 분류할 수 있다. 참조 타입은 new 연산자를 통해서 heap영역에 생성되고 참조변수를 통해서 참조되는 자료형들을 의미한다. 자바에서 참조 타입으로는 배열, 클래스, 인터페이스, enum, 애노테이션이 있다.(배열은 이미 설명했고 나머지들은 이후 단원에서 설명하겠다)
자바에서 참조 타입들이 생성되고 메모리에 만들어지는 방법은 다음과 같다.
Car c;
// Car클래스 타입의 변수 c를 선언하면 메모리 스택(run time stack)에 Car타입의 참조변수 c가 생성된다.
// 이것은 참조변수 c를 선언한 것이지 Car의 객체를 생성한 것은 아니다.
c = new Car();
// 객체의 생성은 new 연산자를 이용해서만 가능하다.
// 힙(heap)영역에 new연산자를 이용하여 동적으로 Car타입의 객체를 생성하고 c라는 참조변수가 참조하도록 한다.
c.name = "모닝";
// Car객체가 name이라는 멤버변수(속성)을 가진다면 "."연산자를 이용하여 접근할 수 있다.
다음과 같은 방법으로도 가능하다.
Car c = new Car();
c.name = "모닝";
2. 생성자(constructor)
클래스 이름과 동일한 이름을 갖는 메서드를 생성자라고 한다.(생성자는 static 메서드이다!) new 연산자와 함께 사용되어 힙 영역에 동적으로 메모리 공간을 할당 및 클래스 멤버 변수의 초기화를 한다.(객체를 만들면서 멤버변수의 값들이 지정되지 않았으면 디폴트값으로 초기화한다. 숫자 데이터는 0,블리언 데이터는 false, 참조데이터는 null)
정리하면 생성자의 이름은 클래스의 이름과 동일해야 하고 클래스의 정보를 토대로 그 클래스의 객체를 힙메모리에 만들어 주는 역활을 하는 메서드이다. 힙메모리에 만들려면 메모리를 할당받아야 하기에 new 연산자와 함께 사용된다.
리턴값은 객체 자신이지만 따로 리턴값을 지정할수는 없고 new연산자가 만들어 놓은 메모리 영역에 객체를 만든다.
① 디폴터 생성자
class Data
{
/*
이런 모양의 생성자를 디폴터 생성자 메서드라 부르며 클래스에 정의된 생성자가 하나도 없다면 정의 하지 않아도 컴파일러가 자동으로 만든다.
http://cafe.naver.com/jjdev/227참조
*/
Data()
{
}
}
② 매개변수를 가지는 생성자
class Data
{
int x;
/* 생성자 디폴트 모양이 아닌 생성자는 자동으로 만들어지지 않고, 클래스 내 이런 생성자가 하나라도 있으면 디폴트 생성자는 자동으로 만들어 지지 않는다.*/
Data(int x)
{
this.x = x;
}
}
※ 매개변수를 가지는 생성자를 이용하는 예
다음과 같은 Person 이라는 클래스가 있다.
class Person{
int age;
}
사람의 경우 태어날때 우리나라의 경우 1살이지만 미국의 경우는 0살이다. 다시 말해 Person클래스를 사용하는곳이 한국이냐 미국이냐에 따라 age의 초기값이 달라야 한다.
//미국의 경우
class Person{
int age;
Person(){
this.age = 0;
}
}
//한국의 경우
class Person{
int age;
Person(){
this.age = 1;
}
}
이같은 경우 Person 클래스를 다음과 같이 만들면 객체가 만들어지는 시점에 age값을 초기화 시킬 수 있다.
class Person{ int age; Person(int age){ this.age = age; } }
③ 생성자 오버로딩
class Data
{
int x;
// 생성자 1
Data()
{
}
// 생성자 2
Data(int x)
{
this.x = x;
}
}
Data d = new Data(); // 첫번째 생성자가 호출되면서 x의 값은 디폴트로 0으로 초기화
Data d = new Data(2); // 두번째 생성자가 호출되면서 x의 값은 2로 초기화
④ this()
클래스 내에서 this라는 키워드로 메서드를 호출하면(ex_ this(), this(10), ......) this가 객체자신이라고 했으니 this()형식의 메서드 호출은 생성자를 호출하는 것이다.
class Data
{
int x;
// 생성자 1
Data()
{
this(0);
}
// 생성자 2
Data(int x)
{
this.x = x;
}
}
[출처] [22] OOP - 객체의 생성, 생성자 (JAVA 개발자) |작성자 zeroDay
'Basic > etc' 카테고리의 다른 글
클래스와 객체 (0) | 2014.11.10 |
---|---|
final, static (0) | 2014.11.10 |
싱글톤 패턴 (0) | 2014.11.10 |
extends 와 implements의 차이? (0) | 2014.11.09 |
추상클래스와 인터페이스 (0) | 2014.11.09 |