본문 바로가기

Java프로그래밍

객체기반SW설계 16차시: 클래스 정의 (Defining Class)

반응형
SMALL



클래스 정의

객체기반 프로그래밍의 순서는 간단히 2단계로 이루어진다.
1. 필요한 클래스들을 정의한다.
2. 클래스들로부터 객체를 만들어내서 조합하여 원하는 프로그램을 만든다.

Java언어에서 클래스를 정의하는 것에 대해 알아보자.

Person이라는 클래스를 만든다고 하자.
우선 아래와 같이 쓴다.
맨 앞의 public은 접근지정자 (access modifier)라고 하며,
'public'은 Person 클래스를 다른 사람들도 사용할 수 있도록 하겠다는 것이다. 
클래스 정의는 { 과 } 사이에 기입해 넣으면 된다.
public class Person
{

}

이제 클래스 안에 넣을 데이터를 지정해야 한다.
이 데이터를 '클래스 멤버변수 (member variable)이라고 한다.
Person이라는 정보이므로 사람의 나이와 성별을
각각 age와 isFemale 멤버변수에 저장한다고 하자.
isFemale 변수의 경우, true이면 여자이고, false이면 남자를 나타낸다고 하자.
'private'도 'public'과 마찬가지로 접근지정자의 일종이다.
이것의 의미는 클래스 외부에서는 이 멤버변수들을 읽거나 쓸 수 없다는 뜻이다.
public class Person
{
   private int age;
   private boolean isFemale;
}

클래스 안에는 데이터 외에도, 동작에 해당하는 멤버메소드(member method)들을
지정할 수 있다.
여기서는 나이를 출력하는 동작을 하는 메소드와
남자 혹은 여자인지를 출력하는 동작을 하는 메소드를 구현해 넣어보겠다.
public class Person
{
   private int age;
   private boolean isFemale;

public void showAge() 
{
   System.out.println("My age is "+age);
}

pubic void showGender()
{
   if (isFemale == true) 
   {
      System.out.println("I am female.");
   }
   else
   {
      System.out.println("I am male.");
   }
}
}
먼저 showAge( )메소드를 살펴보자.
'public'은 앞서 설명한 대로 접근지정자이고,
클래스 외부에서 이 메소드를 호출할 수 있다는 뜻이다.
이 메소드는 멤버변수 age의 값을 단순 출력하는 역할을 한다.
그리고,
showGender( ) 메소드를 보면,
멤버변수 isFemale의 값에 따라 성별을 출력하는 역할을 한다.
이것 역시 'public' 접근지정자를 갖는다.

생성자(Constructor)의 정의

클래스의 이름, 멤버변수, 멤버메소드 들을 정의하면
어느 정도 클래스가 모양새를 갖추게 된다.
한가지만 더 추가하면 거의 완벽한 클래스 정의가 된다.
그것은 바로 생성자이다.

생성자는 클래스로부터 객체를 만들어 내는 역할을
하는 특수 메소드이다.
생성자의 이름은 클래스 이름과 같고,
반환형이 없다.
그러나 함수의 인수는 가질 수 있다.
생성자 역시 클래스 정의 안에 만들어야 한다.

public class Person
{
   private int age;
   private boolean isFemale;

   public Person() // constructor 1
   {
   }

   public Person (int _age, boolean _isFemale)
   {
      age = _age;
      isFemale = _isFemale;
   }

public void showAge() 
{
   System.out.println("My age is "+age);
}

pubic void showGender()
{
   if (isFemale == true) 
   {
      System.out.println("I am female.");
   }
   else
   {
      System.out.println("I am male.");
   }
}
}
위에서 2개의 생성자를 정의했다. (빨간 색으로 표시했다.)
하나는 default 생성자(위의 것)이고, 다른 하나는 인수를 갖는 생성자이다.
default 생성자란 아무런 인수를 받지 않는 생성자를 말한다. 
특히, 클래스 안에 생성자를 굳이 만들지 않을 경우에라도 자동으로 만들어지는 생성자이다. 
(자동이라는 의미는 없어도 있는 것처럼 행동한다는 뜻이다. 클래스 정의 안에 저절로 입력된다는 뜻은 아니다.)
다만, default 생성자 외에 다른 생성자를 만들면, 반드시 default 생성자를 만들어야 하는 규칙이 있다.
두 번째 생성자는 두 개의 인수를 받아서,
멤버변수들을 초기화하고 있다.
객체를 생성하기 위해서는 필요에 따라 이들 두 생성자 중에 선택해서 사용하면 된다.
또한 필요한 경우, 생성자를 더 추가해서 만들어도 된다. 


클래스로부터 객체를 생성

이제 Person 클래스 정의를 이용해서 객체를 만들어서
사용하는 방법을 알아보자.
Person p1 = new Person();
Person p2 = new Person(20, true);

위에서는 두 개의 객체, p1과 p2를 만들고 있다.
'new'라는 것은 객체를 만드는 역할을 한다.
이 때 생성자가 사용되었다.
위의 것은 default 생성자를 사용했고,
아래 것은 두 개의 인수를 받는 생성자를 사용했다.

객체의 사용

이제 p1과 p2의 객체를 사용하는 예를 보자.
p1.showAge();
p2.showGender();
객체에다가 '.'을 붙이고 메소드 이름을 쓰면
해당 메소드를 호출하는 것이 된다.
메소드 showAge( )와 showGender( )는 접근 지정자가 'public'이므로
클래스 밖에서 호출이 가능한 것이다.

반면에, 멤버변수 age와 isFemale은 객체를 통해서 접근이 불가하다.
왜나햐면 'private' 접근지정자를 사용하고 있기 때문이다.
접근을 허용하려면 'public'으로 바꾸어야 한다.

이상에서 클래스를 정의하는 방법과 객체를 생성하여 사용하는 방법에 대해
쉬운 예를 들어 알아보았다.
복잡한 예들도 많지만 위에서 설명한 기본 골격을 잘 알아두면
크게 어렵지는 않다.

위의 내용을 동영상으로 설명합니다. 


반응형
LIST