For Programmer

6. 클래스 본문

Programming language/Java

6. 클래스

유지광이 2021. 8. 13. 00:01
728x90

클래스의 기본 구조

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

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

 

클래스 선언

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

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

 

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

  • public
    • public는 모든 클래스에서 객체 생성이 가능하다.
  • private
    • private는 다른 클래스에서 내부(inner)클래스에서만 생성이 가능하다.
  • 접근 한정자 사용 안 함(default)
    • 접근 한정자를 사용하지 않고 선언된 클래스는 같은 패키지 내의 클래스에서만 객체 생성이 가능하다

final 클래스

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

Util 형식의 클래스나 여러 상수 값을 모아둔 Constants 클래스을 final로 선언한다.

  • 상수 클래스
  • public final class Constants {
        public static final int SIZE = 10;
    }
    
    //public class SubConstants extends Constants { //불가
    }
  • Util 형식의 클래스
  • JDK에서 String도 final 클래스로 선언되어 있다. 자바의 코어 라이브러리이기 때문에 side-effect가 있으면 안 된다. 다른 개발자가 상속을 해서 새로운 SubString을 만들어 라이브러리로 다른 곳에서 사용하게 되면 유지보수, 정상 실행 보장이 어려워질 수 있다.
  • public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
    	.....
    }

 

abstract 클래스

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

 

객체의 생성 - new 키워드

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

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

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

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

 

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

객체변수명 = new 클래스명(); //객체를 생성하기 위해서는 new 키워드를 사용한다. new 키워드 뒤에는 개체의 기반이 되는 클래스명이 온다.
myclass = new MyClass();

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

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

 

728x90

'Programming language > Java' 카테고리의 다른 글

6-2 클래스 - 생성자  (0) 2021.08.13
6-1. 클래스 - 멤버 변수  (0) 2021.08.13
5. 제어문(가정문,반복문)  (0) 2021.08.12
4. 배열  (0) 2021.08.11
3. 연산자  (0) 2021.08.11
Comments