본문 바로가기

Java/강의

생성자(Class Constructors)

Rectangle.java
// Rectangle 클래스의 생성자 메소드를 정의하는 프로그램

class Rectangle
{
  int length;
  int width;

  // 클래스 생성자의 정의
  Rectangle (int len, int wid)
  {
    length = len;
    width = wid;
  }

  int area()
  {
    return length * width;
  } // method area
// class Rectangle
ShowConstructor.java
/* main() 메소드에서 클래스 생성자를 이용하여 
   Rectangle 클래스의 객체를 만드는 프로그램 */


public class ShowConstructor
{
  public static void main (String[] args)
  {
    int alength = 3;
    int awidth = 5;
    int rectanglearea;
    Rectangle aRectangle; // 객체 참조 변수.

    aRectangle = new Rectangle(alength, awidth); // 객체생성.
    rectanglearea = aRectangle.area();
    System.out.println("The area of rectangle is " + rectanglearea);
  }
}

생성자(Class Constructors) 
  • 생성자 - 생성된 클래스의 객체를 초기화하는 메소드 해당 클래스 내에서 정의된다.
  • 객체가 생성되면 생성자가 반드시 호출된다.
  • 기본자료형의 데이타는 이전의 언어에서처럼 변수의 선언으로 생성되지만, 클래스의 객체는 반드시 new 연산자와 생성자 메소드를 사용하여 생성한다.
  • 생성자는 반환값을 가지지 않으며, 항상 클래스와 같은 이름을 가진다.
  • 생성자는 필요에 따라 인수를 가지기도 하고, 가지지 않을 수도 있다.
  • 앞에서 정의한 Rectangle 클래스에 생성자를 다음과 같이 추가할 수 있다.
  • 여기서는 두 개의 int형 인수가 선언되어 있다 프로그램 설명 ▶ Rectangle aRectangle; Rectangle 클래스의 객체 참조변수 aRectangle의 선언 변수 aRectangle은 객체 자체가 아니다. 변수의 선언은 변수 aRectangle을 위한 메모리를 할당할 뿐이며, Rectangle 클래스의 객체가 생성되는 것은 아니다. 변수 aRectangle은 main() 메소드의 지역변수로, Rectangle 클래스의 객체를 가리킬 수 있는 참조변수이다. 생성된 aRectangle 변수는 미정값(undefined value)을 가지고 있다. 그림 4-2. 객체 참조변수 aRectangle ▶ aRectangle = new Rectangle (aLength, aWidth); 객체는 new 연산자클래스 생성자를 호출함으로써 생성된다. ▶ new 연산자 - 클래스의 인스턴스 변수를 위한 메모리를 할당하여 객체를 만들고, 인스턴스 변수를 디폴트 값으로 초기화한다. (숫자, 문자 - 0, 객체, 문자열 - null , boolean형- false 값) 인스턴스 변수의 초기화가 끝나면, new 연산자는 생성자 메소드를 호출한다. 실인수를 aLength와 aWidth로 하여 Rectangle 클래스의 생성자를 호출하여 새로운 객체를 초기화한다. 생성된 객체의 주소를 반환값으로 돌려보내, 변수 aRectangle에 저장한다. 변수 aRectangle은 객체 자체가 아니라, 객체를 가리킨다. (객체 메모리의 주소를 가짐: C 언어에서의 포인터변수) 객체 참조변수는 Rectangle 클래스의 객체를 가리키는 참조변수이지만, 표현의 편리를 위해 참조변수가 가리키는 객체를 "aRectangle 객체"라고 부른다. 객체 참조변수가 아무 객체도 가리키지 않는 상태로 만들려면 null 값을 부여한다. 그림 4-3. 객체의 생성 ▶ rectangleArea = aRectangle.area(); aRectangle 객체의 area() 메소드를 호출하고, 결과값을 rectangleArea 변수에 저장 객체 메소드의 호출형식: 객체 참조변수 + 다트(.) + 메소드의 이름 ▶ class Rectangle { int length; int width; ............ } 변수 length와 width는 클래스의 인스턴스 변수로, 객체가 생성될 때 디폴트 초기값 0 만약 클래스 내에 생성자가 정의되어 있지 않을 경우, 컴파일러가 아무런 작업도 수행하지 않는 디폴트 생성자(default constructor)를 내부적으로 만들어 준다. 디폴트생성자 : 인자를 가지고 있지 않은 생성자를 말한다.
구조체와 클래스의 차이점 ☞ 구조체는 메모리를 할당하지만 클래스는 메모리할당 + 행동을 취한다.

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

인스턴스 변수와 정적 변수(Static Variables)  (0) 2011.02.10
인수 전달 기법  (0) 2011.02.09
정수 데이타의 입출력!!  (0) 2011.02.07
키보드 입력받기!! (C의 scanf)  (0) 2011.02.07
print 와 println 의 차이점!  (0) 2011.02.07