java

자바 4장 클래스와 객체

Salt-Fn 2020. 11. 27. 03:06

캡슐화(encapsulation)란 객체를 캡슐로 싸서 그 내부르 보호하고 볼 수 없게 하는 것으로 객체의 가장 본질적인 특징이다.

클래스(class)는 객체의 모양을 서언한 틀이며, 클래스 모양 그대로 생성된 실체(instace)가 객체이다.

 

class는 field와 method로 구성된다.

 

상속은 상위 개체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계이다.

자바의 상속 sub class가 super class의 속성을 물려받아 부모 클래스에 기능을 확장(extends)하는 개념이다.

이점으로 코드의 중복 작성을 방지하고, 코드를 재사용 함으로써 코드 작성에 드는 시간과 비용을 줄인다.

 

다형성(polymorphism)은 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현 되는 것을 말한다.

 

슈퍼 클래스에서 구현된 메소드를, 서브 클래스에서 자신의 특징에 맞게 동일한 이름으로 다시 구현하는 것을

메소드 오바라이딩(overriding)이라고 부른다.

클래스 내에서 같은 이름의 메소드를 여러개 만드는 것을 메소드 오버로딩(overloading)이라고 한다. 

 

new 를 통하여 인스턴스화 할수있다.

 

Circle pizza = new Circle(); 를 통해 Circle의 객체를 생성

new 연산자는 Circle 타입의 크기 만한 메모리를 할당받아 메모리에 대한 레퍼런스를 리턴한다.

 

객체의 멤버에 접근할 때는 다음과 같이 점(.) 연산자를 이용한다.

생성자

생성자는 객체가 생성되는 순간에 자동으로 호출되는 메소드로서, 객체에 필요한 초기화를 수행하는 코드이다.

생성자 호출의 예

위 예처럼 매개 변수의 개수와 타입만 다르다면, 클래스 내에 생성자를 여러개 둘 수 있다. // 오버로딩

 

● 생성자는 객체를 생성할 때 한번만 호출된다.

● 생성자에 리턴 타입을 지정할 수 없다.

● 생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함이다. 

 

클래스에 생성자가 하나도 선언되어 있지 않은 경우, 컴파일러는 디폴트 생성자를 자동으로 생성한다.

단, 생성자가 하나라도 존재하는 클래스에는 컴파일러가 디폴트 생성자를 임의로 삽입해 주지 않는다.

 

객체 배열

객체배열은 객체에 대한 레퍼런스를 원소로 갖는 배열이다.

객체 배열의 예

메소드 오버로딩(method overloading)

클래스 내에 이름은 같지만 매개 변수의 타입이나 개수가 서로 다른 여러개의 메소드를 작성할 수 있는데 이를 메소드 오버로딩 이라고 한다. 메소드 오버로딩은 다형성의 한 종류이다.

 

메소드 오버로딩이 가능할려면 다음 두 조건을 만족하여야 한다.

 

● 메소드 이름이 동일해야 한다.

● 메소드 매게 변수의 개수나 타입이 서로 달라야 한다.

오버로딩 성공사례
오버로딩 실패사례

실패사례의 경우 매게 변수의 개수와 타입이 같으므로 실패하였다.

 

멤버 접근 지정

static 멤버

클래스의 멤버들 중 다음과 같이 static 지시어로 선언된 멤버를 static멤버라고 부른다.

 

class StaticSample {

int n; // non-static 필드

void g() {} // non-static 메소드

static int m; // static 필드

static void f () {} // static 메소드

}

 

static 멤버는 클래스당 하나만 생성되는 멤버로서, 동일한 클래스의 모든 객체들이 공유 하므로 클래스 멤버라고 부른다.

반면, non-static 멤버는 각 객체마다 별도로 생기므로 인스턴스 멤버라고 부른다.

non-static 멤버와 static 멤버의 차이

static 메소드는 두 개의 제약 사항을 가진다.

 

1. static 메소드는 오직 static 멤버만 접근할 수 있다.

2. static 메소드에서는 this를 사용할 수 없다.

 

final

final이 클래스 이름앞에 사용되면 클래스를 상속받을 수 없음을 지정한다.

메소드 앞에 final이 붙으면 이 메소드는 더 이상 오버라이딩할 수 없음을 지정한다.

final로 필드를 선언하면 필드는 상수가 된다.