1 추상클래스

추상클래스는 상속에서 슈퍼클래스로 사용된다.

 

추상메소드

추상메소드(abstract method)란 선언은 되어 있으나 코드가 구현되어 있지 않은 즉 껍데기만 있는 메소드이다. 추상 메소드를 작성하려면 absrtact 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다.

 

추상클래스 만들기

˙ 추상 메소드를 포함하는 클래스

˙ 추상 메소드가 없지만 abstract로 선언한 클래스

추상메소드를 가지고 있으면 반드시 추상클래스로 선언해야 한다. 

 

추상클래스의 상속

추상 클래스를 단순히 상속받는 서브 클래스는 추상 클래스가 된다. 추상 클래스의 추상메소드를 그대로 상속받기 때문이다. 그러므로 서브 클래스에  abstract를 붙여 추상 클래스임을 명시해야 컴파일 오류가 발생하지 않는다.

다음은 Shape을 상속받는 Line클래스에서 추상 메소드인 draw()를 오버라이딩 하지 않으면 자동으로 추상클래스가 되므로 Line은 abstract키워드를 사용하여 추상 클래스임을 명시해야한다.

 

 

2 인터페이스

인퍼테이스(interface)는 interface키워드를 사용하여 클래스를 선언하듯이 선언한다. 다음은 전화기의 규격을 묘사하는 PhoneInterface 인터페이스를 선언하는 예이다.

 

인터페이스 구성

˙ 상수와 추상 메소드
˙ default 메소드
˙ private 메소드
˙ static 메소드

추상 메소드는 public abstract 로 정해져 있으며 생략될 수도 있고 다른 접근 지정자로 지정 될 수 있다. default, private, static 메소드들은 몯  인터페이스 내에 코드가 작성되어 있어야한다. 

default 메소드의 접근지정은 public으로 고정되어 있다. private 메소드는 인터페이스 내에서만 호출 가능하다. static 메소드의 경우 접근 지정이 생략되면 public이며 private로 지정될 수 있다.

 

인터페이스 특성

● 인터페이스는 객체를 생성할 수 없다.

● 인터페이스 타입의 레퍼런스 변수는 선언 가능하다.

● 인터페이스끼리 상속된다.

●인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현해야한다.

 

인터페이스 구현

인터페이스 구현이란 implements 키워드를 사용해 인터페이스의 모든 추상 메소드를 구현한 클래스를 작성하는 것을 말한다. 다음은 PhoneInterface를 구현한 SamsungPhone 클래스를 작성한 사례이다.

 

인터페이스 다중 구현

클래스는 하나 이상의 인터페이스를 구현할 수 있다. 콤마로 각 인터페이스를 구분해 나열하며 각 인터페이스에 선언된 모든 추상 메소드를 구현해야 한다. 그렇지 않으면 컴파일 오류가 발생한다.

다음은 AIInterfaced와 MobilePhoneInterface를 모두 구현한 AIPhone클래스를 작성한 사례이다.

 

3 인터페이스와 추상클래스 비교

인터페이스와 추상클래스의 유사점

˙ 객체를 생성할 수 없고, 상속을 위한 슈퍼클래스로만 사용된다.
˙ 클래스의 다형성을 실현하기 위한 목적이다.

'JAVA' 카테고리의 다른 글

[JAVA] 메소드 오버라이딩  (0) 2020.05.26
[JAVA] 상속  (1) 2020.05.26
[JAVA] 접근지정자와 static, final  (0) 2020.05.25
[JAVA] 생성자와 this  (0) 2020.05.23
[JAVA] 객체와 클래스  (0) 2020.05.23

메소드 오버라이딩

메소드 오버라이딩(mathod overriding)은 슈퍼 클래스와 서브 클래스의 메소드 사이에 발생하는 관계로서 슈퍼 클래스에 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 가는 메소드를 서브 클래스에서 재작성 하는 것이다.

서브 클래스의 개발자는 슈퍼 클래스에 있는 메소드로 목적하는 바를 이룰 수 없을 때 동일한 이름의 메소드를 서브 클래스에 다시 작성할 수 있다.

메소드 오버라이딩은 "슈퍼 클래스 메소드 무시하기 혹은 덮어쓰기"로 표현할 수 있다. 이는 슈퍼 클래스의 메소드를 무시하고 서브 클래스에서 오버라이딩된 메소드가 무조건 실행되도록 한다는 것인데 이런 처리를 동적바인딩 이라고 부른다.

 

Shape클래스를 상속받는 3개의 클래스 Line, Rect, Circle 클래스를 만들고 Shape이 draw()를 오버라이딩한 사례를 보여준다. 메소드의 이름, 리턴타입, 매개변수가 모두 동일하게 작성되었다.

 

오버라이딩된 메소드 호출

아래는 Line, Rect, Circle 객체들이 만들어졌을 때 오버라이딩된 draw()의 호출에 대해 2가지의 경우를 보여준다.

(1) new Line()에 의해 생성된 객체에는 2개의 draw() 메소드가 존재하며 레퍼런스 line이 Line 타입이므로 컴파일러는 line.draw()가 Line 클래스의 draw() 메소드를 호출하도록 하고 실행시에도 Line 클래스의 draw()가 호출된다.

 

(2) new Line()에 의해 생성된 Line 객체에는 2개의 draw() 메소드가 존재하지만 첫번째와 달리 레퍼런스 shape이 shape타입이다. 그러므로 shape.draw()를 컴파일할 때 컴파일러는 Shape 클래스에 draw() 멤버가 있는지 확인하고 Shape의 draw()를 호출하도록 컴파일한다. 

하지만 shape.draw()의 실행 시 shape이 가리키는 객체에는 Shape의 draw()를 오버라이딩한 Line의 draw()가 존재하기 때문에 Shape의 draw()가 아닌 Line의 draw()가 실행된다. 이 과정을 동적바인딩(dynamic binding)라고 부른다.

 

오버라이딩의 목적 다형성 실현

오버라이딩은 슈퍼클래스에 선언된 메소드를 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 내용이다. 오버라이딩은 상속을 통해 하나의 인터페이스(같은이름)에 서로 다른 내용 구현 이라는 객체 지향의 다형성을 실현하는 도구이다.

실행결과

Line
Shape
Line
Rect
Circle

 

오버라이딩과 super 키워드

메소드가 오버라이딩되어 있는 경우 동적 바인딩에 의해 항상 서브클래스에 오버라이딩한 메소드가 호출됨을 설명했다. 그러면 슈퍼클래스의 메소드는 더이상 쓸모없게 되는가?? 아니다.

다음과 같이 서브클래스에서 super키워드를 이용하면 정적바인딩을 통해 슈퍼클래스의 멤버에 접근할 수 있다.

super는 자바 컴파일러에 의해 지원되는 것으로 슈퍼 클래스에 대한 레퍼런스이다. super을 이용하면 슈퍼 클래스의 필드와 메소드에 접근 가능하다.

 

메소드 오버라이딩의 제약 사항

˙ 슈퍼 클래스의 메소드와 동일한 원형을 작성한다.
˙ 슈퍼 클래스 메소드이 접근 지정자보다 접근의 범위를 좁여 오버라이딩 할 수 없다.
˙ static, private, final 로 선언된 메소드는 서브 클래스에서 오버라이딩할 수 없다.

 

오버로딩(overloading)과 오버라이딩(overrding)

오버로딩과 오버라이딩은 자바에서 다형성을 이루는 방법들이다. 오버라이딩은 슈퍼클래스의 메소드 이름, 매개변수 타입과 개수, 리턴 타입을 모두 동일하게 서브 클래스에 재작성하는 경우이며

오버로딩은 한 클래스나 상속 관계에 있는 클래스들 사이에 메소드의 이름은 같지만 매개변수 타입이나 개수를 다르게 해서 메소드를 작성하는 경우이다. 

오버라이딩은 상속관계에서만 성립되지만 오버로딩은 동일한 클래스 내 혹은 상속 관계 둘 다 가능하다.

'JAVA' 카테고리의 다른 글

[JAVA] 추상클래스와 인터페이스  (0) 2020.05.27
[JAVA] 상속  (1) 2020.05.26
[JAVA] 접근지정자와 static, final  (0) 2020.05.25
[JAVA] 생성자와 this  (0) 2020.05.23
[JAVA] 객체와 클래스  (0) 2020.05.23

1 상속

자바의 객체지향 언어에서 상속은 부모의 생물학적 특성을 물려받는 유전에 가깝다. 부모 클래스에 만들어진 필드와 메소드를 자식 클래스가 물려받는것이다. 상속 선언만 하면 자식 클래스는 부모 클래스에 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 얻는다.

상속은 클래스 사이의 상속이지 객체 사이의 상속은 아니다. 자식 객체는 자식 클래스와 부모 클래스에 만들어진 모든 멤버를 가지고 생성된다.

 

상속의 필요성

개발자가 4개의 클래스를 만들었다고 가정하고 4개의 클래스에는 말하기, 먹기, 걷기, 잠자기의 코드가 공통으로 들어가 있다. 만약 말하기 멤버에 오류가 있어 수정하게 되면 4개의 클래스를 모두 수정해야 하는 번거로움이 있다.

 

상속을 이용하면 문제는 간단하다. 아래 그림과 같이 공통된 코드를 모아 person 클래스를 작성하고 나머지 클래스를 상속 관계로 선언하면 코드를 중복 작성할 필요 없이 물려받기만 하면 된다.

Student 클래스는 person클래스를 상속받고 '공부하기' 멤버만 만들면 되고 StudentWorker 클래스는 Student 클래스를 상속받아 '일하기' 만 만들면 된다.

상속은 코드 중복을 제거하여 클래스를 간결하게 구현할 수 있게 된다. 처음부터 Person 클래스를 만들고 이를 상속받아 확장하는 식으로 4개의 클래스를 만들어 구상해야 한다. 이것이 상속의 핵심이다. 

 

객체 지향에서 상속이 주는 장점

˙ 클래스의 간결화 - 멤버의 중복 작성 불필요
˙ 클래스 관리 용이 - 클래스들의 계층적 분류
˙ 소프트웨어의 생산성 향상 - 클래스 재사용과 확장 용이

 

2 클래스 상속

자바의 상속 선언

상속을 선언할 때 확장한다는 뜻을 가진 extends 키워드를 사용한다.

 

자바 상속의 특징

● 자바에서는 클래스의 다중 상속을 지원하지 않는다. 

자바는 클래스를 여러 개 상속받는 다중상속을 지원하지 않는다. 그러므로 extends 다음에는 클래스 이름을 하나만 지정할 수 있다.

● 자바에서는 상속의 횟수에 제한을 두지 않는다.

● 자바에서 계층 구조의 최상위에 java.lang.Object 클래스가 있다.

 

3 상속과 protected 접근 지정자

슈퍼클래스에 대한 접근 지정

 

● 슈퍼클래스의 private 멤버

슈퍼클래스의 멤버가 private로 선언되면 서브 클래스를 포함하여 다른 어떤 클래스에서도 접근할 수 없다. private는 오직 현재 클래스의 멤버들에게만 접근을 허용한다.

● 슈퍼클래스의 디폴트 멤버

슈퍼클래스의 멤버가 디폴트로 선언되면 패키지에 있는 모든 클래스가 접근 가능하다. 서브 클래스라도 다른 패키지에 있다면 슈퍼클래스의 디폴트 멤버는 접근할 수 없다.

● 슈퍼클래스의 public 멤버

슈퍼클래스의 멤버가 public로 선언되면 같은 패키지, 다른 패키지에 있는 모든 클래스에서 접근할 수 있다.

 

슈퍼클래스의 protected 멤버

protected 멤버에 대해서는 다음과 같은 경우에 접근을 허용한다.

˙ 같은 패키지에 속한 모든 클래스들
˙ 같은 패키지든 다른 패키지든 상속받는 서브 클래스

 

 

 

'JAVA' 카테고리의 다른 글

[JAVA] 추상클래스와 인터페이스  (0) 2020.05.27
[JAVA] 메소드 오버라이딩  (0) 2020.05.26
[JAVA] 접근지정자와 static, final  (0) 2020.05.25
[JAVA] 생성자와 this  (0) 2020.05.23
[JAVA] 객체와 클래스  (0) 2020.05.23

1 접근지정자

객체지향언어는 접근지정자를 두고 있다. 객체를 캡슐화하기 때문에 객체에 다른 객체가 접근하는 것을 허용할지 안할지를 정해야한다.

 

클래스 접근 지정

클래스 접근 지정이란 다른 클래스에서 이 클래스를 활용할 수 있는지 허용 여부를 지정하는 것을 말한다.

● public 클래스

패키지에 상관없이 다른 어떤 클래스에게도 사용이 허용된다. 

 

● 디폴트 클래스(접근 지정자 생략)

접근지정자 없이 클래스를 선언한 경우 디폴트(default) 접근 지정으로 선언되었다고 한다. 디폴트 클래스는 같은 패키지 내의 클래스들에게만 사용이 허용된다.

 

멤버 접근 지정

멤버에 대한 접근 지정자는 private - default - protected - public 순으로 공개의 범위가 넓어진다.

 

● public 멤버

public 멤버는 패키지를 막론하고 모든 클래스들이 접근 가능하다.

 

● private 멤버

private접근 지정자는 비공개를 지시하는 것으로 private 멤버는 클래스 내의 멤버들에게만 접근이 허용된다. 

 

● protected 멤버

protected 접근 지정자는 보호된 공개를 지시하는것으로 2가지 유형의 클래스에만 접근을 허용한다.

첫번째는 같은 패키지의 모든 클래스에 접근이 허용된다
두번째는 다른 패키지에 있더라도 자식 클래스의 경우 접근이 허용된다.

 

● 디폴트(default / package-private) 멤버

접근지정자가 생략된 멤버의 경우 디폴트(default) 멤버라고 한다. 동일한 패키지 내에 있는 클래스들만 디폴트 멤버를 자유롭게 접근할 수 있다.

 

2 static 멤버

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

static 멤버는 객체를 생성하지 않고도 사용할 수 있는 멤버이다. static 멤버는 클래스당 하나만 생성되는 멤버로서 동일한 클래스의 모든 객체들이 공유한다. main()메소드가 실행되기 전에 이미 생성된다. static 멤버는 static 멤버가 포함된 객체를 생성하기 전에도 사용할 수 있다.

반면 non-static 멤버는 객체가 생성되는 객체마다 생기고 다른객체들과 공유하지 않는다. 객체가 사라지면 non-static 멤버도 함께 사라지고 더 이상 접근할 수 없다. 

static 멤버는 클래스당 하나씩 생긴다고 해서 클래스 멤버라고 부르며 non-static 멤버는 각 객체마다 하나씩 생긴다고 해서 인스턴스 멤버라고 부른다.

 

3 final

final 클래스

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

 

final 메소드

final로 메소드를 선언하면 오버라이딩할 수 없는 메소드임을 선언한다. 자식 클래스가 부모 클래스의 특정 메소드를 오버라이딩하지 못하게 하고 무조건 상속받아 사용하도록 한다면 다음과 같이 final로 지정하면 된다.

 

final 필드

final로 필드를 선언하면 필드는 상수가 된다. 상수 필드는 한번 초기화하면 값을 변경할 수 없다. 

 

final키워드를 public static과 함께 선언하면 프로그램 전체에서 사용할 수 있는 상수가 된다.

'JAVA' 카테고리의 다른 글

[JAVA] 메소드 오버라이딩  (0) 2020.05.26
[JAVA] 상속  (1) 2020.05.26
[JAVA] 생성자와 this  (0) 2020.05.23
[JAVA] 객체와 클래스  (0) 2020.05.23
[JAVA] 예외처리  (0) 2020.05.23

1 생성자

생성자의 개념과 목적

생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다. 예를들어 얼굴클래스로 얼굴객체를 만들어 낼 수 있다. 만약 생성자없이 객체가 생성된다면 생성된 얼굴은 맨얼굴 일 것이다. 하지만 생성자를 실행해 얼굴의 각 부위를 화장(초기화)하게 한다. 또한 화장하는 얼굴 부분이나 색을 다르게하는 생성자가 있다면 서로 다른 모양의 얼굴 객체를 생성할 수 있다.

 

생성자 선언 및 활용

생성자는 객체가 생성되는 순간에 자동으로 호출되는 메소드이다.

다음코드는 2개의 생성자를 가진 클래스이다.

 

실행결과

자바피자의면적은314.0
도넛피자의 면적은3.14

 

● 생성자의 이름은 클래스 이름과 동일하다

생성자의 이름은 반드시 클래스의 이름과 동일하게 작성해야한다.

 

● 생성자는 여러 개 작성(오버로딩)할 수 있다.

매개변수의 개수와 타입만 다르다면 클래스 내에 생성자를 여러 개 둘 수 있다.

 

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

객체 생성은 반드시 new를 통해서만 이루어지고 생성자는 이 때 자동으로 한번만 호출된다. 호출하고 싶을 때 아무때나 호출할 수 있는 메소드가 아니다.

 

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

생성자는 어떤 값도 리턴하지 않기 떄문에 리턴 타입을 선언해서는 안된다.

 

기본생성자

기본생성자(default constructor)란 매개변수와 실행 코드가 없어 아무 일도 하지않고 단순 리턴하는 생성자이다. 디폴트 생성자라고도 부른다.

● 기본 생성자가 자동으로 생성되는 경우

생성자가 없는 클래스는 있을 수 없다. 객체가 생성될 때 반드시 생성자가 실행되기 때문이다. 그러나 개발자가 생성자를 만들어 놓지 않은 클래스에서도 main메소드 다음 new문은 매개변수 없는 생성자를 호출하게 된다.

호출 할 수 있는 이유는 아래와 같다.

 

● 기본 생성자가 자동으로 생성되지 않는 경우

생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본생성자를 삽입해 주지 않는다.

 

2 this

this는 현재 객체 자신에 대한 레퍼런스이다. 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스이다. this는 컴파일러에 의해 자동 관리되므로 개발자는 this를 사용하면된다.

this는 현재 객체에 대한 레퍼런스이므로 this.radius는 현재 객체의 멤버 radius를 접근한다.

 

● this의 필요성

2개의 radius 는 모두 Circle(int radius)의 매개변수 radius를 접근하기 때문에 멤버 radius를 변경하지 못한다. 자바에서는 이 경우처럼 매개변수의 이름을 멤버 변수와 같은 이름으로 붙이고자 하는 경우가 많은데 이럴 때 다음 코드와 같이 사용하면 된다.

 

● this()로 다른 생성자 호출

this()는 클래스 내에서 생성자가 다른 생성자를 호출 할 때 사용하는 자바 코드이다. 3개의 생성자를 가진 Book2 클래스에서 this()를 활용하는 코드이다.

 

실행결과

생성자 호출됨
춘향전 작자미상
어린왕자 생텍쥐페리

 

● this 사용시 주의할 점

˙ this()는 반드시 생성자 코드에서만 호출할 수 있다.
˙ this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용된다.
˙ this()는 반드시 생성자의 첫 번째 문장이 되어야 한다.

'JAVA' 카테고리의 다른 글

[JAVA] 상속  (1) 2020.05.26
[JAVA] 접근지정자와 static, final  (0) 2020.05.25
[JAVA] 객체와 클래스  (0) 2020.05.23
[JAVA] 예외처리  (0) 2020.05.23
[JAVA] 배열  (0) 2020.05.22

1 객체 지향과 자바

 

자바뿐 아니라 객체 지향 언어를 배울 때마다 당면하는 어려움이 객체(object)에 대한 이해이다. 우리 주변에 있는 모든것이 객체이다. TV, 컴퓨터, 책, 건물, 의자, 사람 등 실세계는 객체들의 집합이다.

실세계의 객체들은 자신만의 고유한 특성(state)과 행동(behavior)을 가지며 다른 객체들에게 행동을 요청하거나 정보를 주고받는 등 상호 작용하면서 존재한다. 컴퓨터 프로그램에 등장하는 객체는 예를들면 테트리스 게임에 나오는 블록들, 한글 프로그램의 메뉴나 버튼들이다.

 

객체 지향 언어 특성

● 캡슐화

캡슐화란 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것으로 객체의 가장 본질적인 특징이다. 캡슐약을 생각하면 이해하기 쉽다. 객체는 캡슐화 기본 원칙이지만 외부와의 접속을 위해 몇 부분만 공개 노출한다. 실세계와 달리 자바에서 객체는 클래스라는 캡슐을 사용하며 필드(멤버변수)와 메소드(멤버함수)로 구성된다.

동물 Animal클래스로 작성한 사례와 Animal 클래스의 lion객체와 bear객체가 생성된다.

 

● 상속

실세계에서 상속은 상위 객체의 속성이 하위 개체에 물려져서 하위개체가 상위개체의 속성을 모두 가지는 관계이다. 자바의 상속은 자식 클래스가 부모 클래스의 속성을 물려받고 기능을 추가하여 확장(extends)하는 개념이다. 자바에서 부모클래스를 슈퍼클래스라고 부르고 자식클래스를 서브클래스라고 한다. 상속은 슈퍼클래스의 필드와 메소드를 물려받아 코드를 재사용함으로 코드작성 시간을 줄인다.

 

● 다형성

다형성은 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것을 말한다. 슈퍼클래스에 구현된 메소드를 서브클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 이른바 메소드 오버라이딩(overriding)으로 불린다. 

다형성의 또 다른 사례는 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 오버로딩(overroding)이 있다.

 

2 자바 클래스 만들기

 

클래스와 객체

자바를 비롯한 객체지향 언어에서 클래스는 객체를 만들어 내기 위한 설계도 혹은 틀이며 클래스 모양 그대로 생성된 실체가 객체이다. 이러한 이유로 객체를 클래스의 인스턴스(instance)라고도 부른다. 

예를들면 소나타는 클래스이고 공장에서 생성된 소나타 차 각각이 객체이며 사람은 클래스이고 나,너,친구,윗집사람 등 살아있는 모든 사람이 바로 객체이다.

클래스는 하나이지만 객체들은 수 없이 많이 생성 될 수 있다. 객체들은 클래스의 모양대로 모두 동일한 속성을 가지고 탄생하지만 자신만의 고유한 값을 가짐으로써 구분된다.

 

클래스와 구성

 

● 클래스 선언, class Circle

Circle 클래스를 선언한다. class키워드와 클래스 이름으로 선언하고 중괄호{} 안에 필드, 메소드를 모두 작성한다. 클래스 외부에는 어떤 필드,메소드를 둘 수 없다. 캡슐화의 원칙 때문이다.

 

● 필드와 메소드

객체 내에 값을 저장할 멤버 변수를 필드라고 부른다. Circle 클래스에는 radius, name의 두 필드가 있다. 메소드는 함수이며 객체의 행동을 구현한다. getArea() 메소드는 Circle 객체의 반지름 정보를 이용하여 면적을 계산해 알려준다.

 

● 접근지정자 public

Circle 이나 필드,메소드에 붙은 public을 접근 지정자(access specifier) 라고한다. public은 다른 클래스에서 활용하거나 접근 할 수 있음을 선언한다.

 

● 생성자(constructor)

클래스의 이름과 동일한 메소를 특별히 생성자 라고한다. 생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메소드이다.

 

new연산자와 객체 생성, 그리고 레퍼런스 변수

● 레퍼런스 변수 선언

객체를 생성하기 전 객체를 가리킬 레퍼런스 변수를 선언한다. 다음은 Circle타입의 객체를 가리킬 레퍼런스 변수 pizza를 선언하는 문장이다.

선언문으로 Circle 타입의 객체가 생성되지 않는다. 변수 pizza는 Circle 클래스의 객체에 대한 주소 즉 레퍼런스를 가지는 변수일 뿐 객체 자체는 아니다. 아직 객체가 생성된 것이 아니며 레퍼런스 변수만 생기고 null로 초기화한다.

 

● 객체생성, new연산자 이용

자바에서는 반드시 new연산자를 이용하여 객체를 생성한다.

생성된 Circle 객체의 주소 즉 레퍼런스를 pizza 변수에 대입한다. new연산자에 의해 객체가 생성되는 다음과 같다.

˙ Circle 타입 크기의 메모리 할당
˙ Circle() 생성자 코드 실행

 

객체 멤버 접근

객체의 멤버에 접근할 때 다음과 같이 레퍼런스 변수 뒤웨 점(.) 연산자를 붙인다.

예를 들면 다음과 같다.

 

ex) Circle클래스의 객체 생성 및 활용

 

실행결과

자바피자의 면적은 314.0
자바도넛의 면적은 12.56

'JAVA' 카테고리의 다른 글

[JAVA] 접근지정자와 static, final  (0) 2020.05.25
[JAVA] 생성자와 this  (0) 2020.05.23
[JAVA] 예외처리  (0) 2020.05.23
[JAVA] 배열  (0) 2020.05.22
[JAVA] 반복문  (0) 2020.05.22

+ Recent posts