Search
Duplicate
😀

05. 클래스

태그
클래스
클래스 구성요소
접근 제한자
this

클래스

객체에 대한 정의의자, 객체의 설계도 이 설계도를 통해 만들어낸 것을 객체라고 한다

현실 객체, 클래스, 프로그램 객체의 관계

현실 객체의 속성과 기능은 추상화(abstraction) 되어 클래스에 정의된다.
클래스는 구체화되어 프로그램 객체(Instance, object)가 된다.
같은 클래스에서 생성된 객체는 모두 다른 객체이다.

클래스의 선언

클래스의 선언부와 몸체로 나뉘고, 몸체에는 클래스의 멤버가 선언된다.
클래스 멤버 구성
1.
객체의 초기화를 담당하는 생성자(Constructor)
2.
클래스가 가지는 속성을 정의하는 멤버 변수(Variable)
3.
클래스가 가지는 데이터를 조작하고 변환하는 메서드(Method)

접근 제한자(Access Modifier)

접근 제한자란 클래스, 변수, 메서드에 접근할 수 있는 권한을 나타내기 위해 사용된다.
접근 관련 modifier를 통해 정보 은닉을 구현할 수 있다.

클래스의 정의 - 선언부

[접근지정자][활용지정자] class 클래스 이름 [extend 부모클래스][implements 인터페이스,,,]
클래스 Modifier
접근 권한과 Modifier를 지정하지 않으면, 같은 패키지 내의 클래스에서만 접근이 가능하다.
서로 다른 패키지의 클래스에 접근하기 위해서는 public으로 지정해야 한다.
Java에서는 Outer Class, Inner Class에 따라 사용 가능한 접근지정자가 다르다
Outer Class ⇒ default, public 사용 가능
Inner Class ⇒ default, public, private, protected 사용 가능
활용 지정자 (사용 방법)
final ⇒ 상속 금지
abstract ⇒ 추상 클래스

클래스의 정의 - 멤버 변수

[접근지정자][활용지정자] Data_Type 변수이름 [= 초기값];

변수 Modifier

변수에 대한 접근 권한이나 활용 방법 제어
modifier 미지정 시 같은 패키지 내의 클래스에만 접근이 가능한 객체 변수라는 의미를 가짐

static 변수 (클래스 변수)

모든 인스턴스에서 공통된 값을 가지는 변수의 경우에는 멤버 변수(인스턴스 변수)로 선언하는 경우에는 불필요한 메모리 낭비가 발생할 수 있다.
static 키워드를 통해 클래스 변수로 선언하는 경우 클래스가 메모리에 로드될 때 1번만 로드되며, 객체가 아닌 클래스 단위의 변수를 가진다.
객체를 통해 클래스 변수를 변경하는 경우 다른 모든 객체들을 통해 호출되는 클래스 변수도 변경된 상태로 바뀐다.

final 변수 (상수)

final이 붙은 변수는 단 한 번 초기화가 가능하다. 하지만 그 이후에는 값을 변경할 수 없는 상수이다. (C++의 const와 같은 의미)

클래스의 정의 - 메서드

[접근지정자][활용지정자] Return_Type 메서드이름([매개변수,,,]) [throws 구문] {};

Method Modifier

접근 권한을 나타내는 Modifier의 경우 그 쓰임은 멤버 변수와 동일하다.

static Method

클래스로부터 인스턴스를 생성하지 않고 호출이 가능한 Method
인스턴스 변수는 인스턴스를 생성해야만 메모리가 잡히기 때문에 클래스 메서드에서는 상요이 불가능하다.
클래스 메서드에서는 클래스 메서드만 호출이 가능함!

final Method

자식 클래스에서 메서드를 재정의할 수 없도록 하는 예약어

abstract Method

메서드의 시그니쳐(리턴 타입, 메서드명, 매개변수)만 정의되고 구체적인 행위, 즉 블록( { } ) 부분은 정의되지 않는 메서드를 의미
추상 메서드를 선언할 때는 abstract 키워드를 메서드 앞에 붙인다.
메서드의 구체적인 행위를 표현하는 블록을 생략한다.

클래스의 정의 - 생성자

[접근지정자] 클래스이름([매개변수 ,,,]) [throws 구문] {}
new 연산자와 함께 상요되어 클래스로부터 객체를 생성할 때 호출되며, 객체의 멤버 변수를 초기화하는 데 사용되는 메서드
객체 생성 및 생성된 객체에 필요한 데이터를 초기화하는 과정을 단순화하여 코드의 양을 줄이는 역할을 수행한다.

생성자의 특징

1.
생성자는 클래스와 같은 이름을 가진 특별한 메서드로 객체 생성 시 멤버 변수의 초기화를 담당
2.
일반 멤버 메서드와 달리 반환형(Return Type)이 없음 << void도 허용되지 않음
3.
생성자는 이름은 같지만 매개변수를 달리하여 여러 개를 중복정의(Overloading) 할 수 있음
4.
생성자는 키워드 'new'와 항상 같이 사용됨 << new 생성자() 구문으로 호출
5.
명시적으로 작성하지 않을 경우, 기본 생성자(Default Constructor)가 제공됨

기본 생성자

모든 클래스에는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있다.
클래스 내부에 생성자 선언을 생략하면 컴파일러는 기본 생성자(default Constructor)를 바이트 코드에 자동으로 추가시킨다.
컴파일러가 자동으로 기본 생성자를 추가해주는 경우는 클래스에 정의된 생성자가 하나도 없을때 뿐이다.

생성자 오버로딩

생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아 인스턴스의 초기화에 사용할 수 있다.
생성자 오버로딩을 통해 매개 변수를 달리하여 생성자를 여러 개 선언하여 다양화할 수 있다.
Public Class Car{ // 필드 String model; String color; // 기본 생성자 Car(){} Car(String model){ this.model = model; } Car(String model, String color){ this.model = model; this.color = color; }
Java
복사

this 키워드

non-static 영역(instance 메서드, 생성자, instance 초기화자)에서만 사용할 수 있는 내장변수
현재 생성중인, 실행중인 그 객체 자신을 말함

this의 사용

1.
지역변수와 인스턴스 변수의 구분
void setName(String name){ this.name = name; }
Java
복사
2.
생성자가 오버로딩된 경우, 자신의 또 다른 생성자 호출
Class Person{ private String name; private int age; Person(String name){ this.name = name; } Person(String name, int age){ this(name); this.age = age; } }
Java
복사
3.
자기 자신의 객체를 메서드의 매개변수로 전달하거나 리턴
XXX(){ return this; } YYY(){ obj.zzz(this) }
Java
복사