Java 입문 | 클래스(Class)

자바의 핵심은 클래스이다. 클래스는 객체의 형식과 특성을 정의하기 때문에 전체 자바 언어에서의 논리적인 구성이며, 객체 지향 프로그램의 기초를 형성한다. 클래스는 인스턴스의 객체를 생성하여 프로그램이 작성된다.

보통 프로그래밍을 건물이 비교하는 경우가 많다. 여기서도 건축에 비교해서 설명을 하자면, 클래스(Class)는 건물 설계도 이고, 건출 설계도에 의해서 만들어진 건물을 객체(Object)라고 볼수 있다. 객체는 우리가 흔하게 보는 모든 사물과 생물체 등등 비유된다.

클래스 멤버

멤버(member)는 구성원이라는 뜻을 가지고 있다. 클래스도 구성원이 있는데 크게 클래스 속성에 해당하는 멤버 변수 부분과 클래스의 기능에 해당하는 생성자 및 메소드 정의 부분을 구성된다.

  • 클래스
    • 멤버 변수(Member variable)
    • 멤버 메소드(Member method)
    • 생성자(Constructor)
    • 일반 메소드

클래스 정의

클래스의 아래와 구성 정의 된다.

[public/private] [final/abstrct] class 클래스명 {
    // 멤버 변수
    // 생성자
    // 메소드
}

간단한 코드로 아래와 같다.

package com.devkuma.tutorial.clazz;

public class MyClass {

   // 멤버 변수
   int a;

   /**
    * 생성자
    */
   public MyClass() {
       // 생성자 내용
   }

   /**
    * 메소드
    */
   public void method() {
       // 메소드 내용
   }
}

클래스 선언

클래스를 선언하는 것은 새로운 타입을 생성하는 것과 같다.

클래스명은 대문자로 시작하는 것이 관례이다.

접근 제어 한정자(Access control modifiers)

  • public

    • public는 모든 클래스에서 객체 생성이 가능하다.
  • private

    • private는 다른 클래스에서 내부(inner)클래스에서만 생성이 가능하다.
  • 접근 한정자 사용 안 함

    • 접근 한정자를 사용하지 않고 선언된 클래스는 같은 패키지 내의 클래스에서만 객체 생성이 가능하다.

final 클래스

final이 붙은 클래스는 하위 클래스를 가지지 못한다. 즉, 상속이 되지 않는 클래스를 뜻한다. 현재의 클래스를 다른 클래스에서 상속받지 못하도록 하는 것은 정보의 보호 측면에서 유용하다.

상속 개념은 다른 장에서 다시 자세히 설명을 하도록 하겠다.

abstract 클래스

abstract이 붙은 클래스는 추상 클래스를 의미한다. 추상 클래스 자체로는 객체를 생성할 수 없는 클래스로써 하위 클래스에서 꼭 상속을 받아야 사용할 수 있는 클래스이다.

추상 클래스 개념은 다른 장에서 다시 자세히 설명을 하도록 하겠다.

객체의 생성 - new 키워드

객체를 생성한다는 것은 객체의 메모리를 동적을 할당하는 것을 의미한다.

클래스를 이용하여 객체를 생성하는 방법은 먼저 일반적인 데이터 타입 선언과 동일하게 클래스 타입의 변수를 선언한다.

클래스(Class)와 객체(Object)는 혼용해서 사용되기도 하지만 서로 다른 항목이다. 클래스는 객체의 형식을 정의하지만 객체 자체는 아니다. 객체는 클래스에 기반을 둔 구체적 엔터티이고 클래스의 인스턴스(instance)라고도 한다.

객체를 선언하려면 변수를 선언하는 것과 동일하다. 먼저 클래스명이 앞에 오고 객체 변수명이 온다.

클래스명 객체변수명;
MyClass myclass;

객체를 생성하기 위해서는 new 키워드를 사용한다. new 키워드 뒤에는 개체의 기반이 되는 클래스명이 온다.

객체변수명 = new 클래스명();
myclass = new MyClass();

객체 선언과 생성을 한번에 할 수도 있다.

클래스명 객체변수명 = new 클래스명();
MyClass myclass = new MyClass();