java 클래스

Java & Android 2015. 7. 30. 12:01

클래스는 표현할 수 있는 모든 것(객체)의 기본 단위(?)이다.
클래스는 변수와 메소드로 구성된다.
변수는 상태를 나타내고 메소드는 동작을 나타낸다고 보면 되겠다.

클래스의 종류

class
아래 나열된 클래스들 중에 해당되지 않며 일반적으로 객체 생성, 기능 수행 등을 위한 클래스로
클래스를 상속할 경우 extends를 사용하고 인터페이스를 상속할 경우 implements를 사용함
abstract class
abstract method를 포함하고 있는 클래스
interface
모든 멤버변수는 상수(final)이고 모든 메소드는 abstract인 클래스로
클래스가 상속할 경우 implements를 사용하고 인터페이스가 상속할 경우 extends를 사용함
enum
열거형이라고 하며 public static final의 의미를 가짐
특정한 상태나 값 등을 정의해 놓고 사용함
inner class
클래스 내부에 정의되어 있는 클래스
anonymous class
이름이 없는 클래스로 주로 한번만 사용되는 클래스에 쓰임


package test;

import java.util.Arrays;

public final class Test {
    //생성자
    public Test() {
    }

    //멤버변수
    int member;

    //메소드
    public void method() {
    }
}

위 코드는 클래스의 기본적인 구조이다.


package

작업을 하다보면 많은 클래스를 생성하게 될(?) 것이고
생성된 클래스의 소스코드를 관리하는 것이 어려워 질 것이다.
패키지는 클래스를 기능, 특징 등으로 구분하고 분류하여 관리하기 위한 것 같다.
패키지는 실제로 저장시에 각각의 단계('.')가 디렉토리와 대응되며 이름은 주로 영문 소문자를 사용한다.
패키지 이름을 다른 회사, 개인이 제작한 패키지와 중복되지 않게 하기 위해
웹주소, 회사이름 등등을 사용하며 주로 웹주소를 권장한다.

패키지 이름이 없는 것을 default package(unnamed package)라고 하며
default 패키지에 속한 클래스들을 다른 패키지에서 import 할 수 없다.


import

자신이 속한 패키지 내의 클래스들은 자동으로 불러올 수 있어 import할 필요가 없지만
다른 패키지에 속한 클래스를 사용하려면 import를 해야한다.
만약 import하지 않고 사용하려면 클래스 이름 앞에 패키지명도 같이 써주어야 한다.
java.lang에 속한 클래스들(String 등등)은 자동으로 import하기 때문에 import 구문을 작성하지 않아도 된다.


클래스 선언

default class - public이 아닌 클래스

public 지시어가 없는 클래스로 다른 패키지에 있는 클래스에서 import할 수 없다.
동일 패키지내에서는 사용 가능하다.

public class

public 지시어가 붙은 클래스는 하나의 소스파일에서 하나만 존재해야 하며
소스파일내에 public class가 있으면 이 클래스의 이름과 소스파일의 이름이 동일해야 한다.
다른 패키지의 클래스에서 import 가능하다.

final class

final은 클래스간의 상속을 허용하지 않는 것으로
다른 클래스에서 final class를 상속할 수 없다.

abstract class

abstract method를 포함하고 있는 클래스는 명시적으로 abstract 지시어를 붙여줘야 한다.
abstract method는 기능 구현 부분을 작성하지 않은 메소드이다.


생성자

반환값이 없고 메소드 이름이 클래스명과 동일한 메소드를 생성자라고 하며
클래스를 메모리로 로드할 때(객체를 인스턴스화 할 때) 객체의 초기화에 사용된다.
파라메터 종류와 갯수에 따라 여러개 작성 가능하다.


멤버 변수

클래스 전역변수라고도 하며 클래스 내의 모든 메소드에서 접근가능하다.
접근제어에 따라 외부 클래스에서도 직접 접근이 가능할 수 있다.
접근제어 지시어는 public > protected > default > private 순으로 접근 범위가 좁아진다.
default는 접근제어 지시어를 사용하지 않은 것으로 생략한다.

멤버 변수에 static 지시어가 있으면 클래스를 인스턴스화 하지 않아도 접근이 가능하며
인스턴스화 된 클래스의 모든 인스턴스에서 공유하게 된다.


메소드

클래스의 기능을 담당하며 멤버 변수와 동일하게 접근제어 지시어에 따라 접근범위를 정할 수 있다.
static 지시어가 있는 메소드도 멤버 변수와 동일하다.
단, static 메소드는 static 멤버 변수와 static 메소드에만 접근이 가능하다.
static이 아닌 멤버 변수와 메소드는 객체 생성전까지 메모리에 로드되지 않으므로 접근할 수 없기 때문이다.
static이 아닌 메소드는 객체화 되어야 호출이 가능하므로 모든 멤버 변수와 메소드에 접근이 가능하다.

: