본문 바로가기

콩's EDUCATION/콩's JAVA

JAVA 3일차 수업

- 클래스의 구성요소

속성(특성) : 멤버변수(인스턴스 변수)

기능(동작, 행위) : 멤버 메서드

생성자 메서드 : 클래스에 대한 객체를 메모리에 생성시 객체의 속성들을 초기화하는 역할

Nested 클래스

 

프로그램적으로 처리 혹은 구현을 위해서 실생활의 객체를 클래스로 정의하는 과정 => 추상화

 

- 소스 코드 구성 .java

패키지 선언; //생략하거나 한번만 선언됩니다.

import 선언; //0 이상, import java.lang.*;

class A{}

class B{}

class C{}

class Test{}

소스파일은 A.java or B.java or C.java or Test.java 저장 가능

public class 선언은 한번만

main 포함하는 클래스에 public class 선언을 권장하며,

소스파일명도 main 포함하는 클래스이름.java 저장하는 것을 권장합니다.

 

 

-멤버변수, 인스턴스 변수 : 객체 생성시에 생성되며,

해당 객체가 가비지컬렉션될때 메모리에서 제거됨

 

- 클래스 변수 : 클래스가 로딩될때 생성되며, 프로그램이 전체 종료할때 메모리에서 제거됨

 

- 로컬 변수 : 메서드 호출될때 메모리 생성되고 메소드 수행 종료되면 가비지컬렉션되어 메모리에서 제거됨

 

- 생성자 메서드(Constructor)

클래스에 대한 객체를 메모리에 생성할 생성되는 객체의 멤버들을 초기화 하기 위한 목적의 메서드

생성자 메서드를 명시적으로 정의하지 않으면 JDK 컴파일 할때 default 생성자를 자동으로 만들어준다.

default 생성자는 매개변수가 없고, 모든 멤버필드를 default초기값으로 초기화한다.

but, 생성자 메서드를 명시적으로 정의하면 JDK 컴파일시에 default 생성자를 만들어주지 않는다.

 

- 생성자는 리턴타입을 정의하지 않는다. (void 안된다)

생성자 메서드 이름은 클래스이름과 대소문자 동일해야한다.

 

AccessModifier 생성자 메서드 이름 (매개변수리스트) {

public

protected

(default)

private

}

 

- 생성자 메서드는 overloading 가능하다.

=> 생성자를 중복 정의하는 이유는 생성되는 객체를 서로 다르게 초기화해야 경우에 좋다.

 

- 클래스내에서 멤버 메서드들간에 호출이 가능하듯이,

클래스내에서 생성자 메서드간에 호출이 가능하다.

** 생성자 메서드 내에서 다른 생성자 메서드를 이름으로 호출할 없습니다.

** 생성자 메서드 내에서 다른 생성자 메서드를 호출할 때는 반드시 첫번째줄에 한번만 호출 가능합니다.

-

Package A

 

 

 

 

 

 

 

 

 

Package B

 

 

 

 

 

 

 

Protecte 다른 패키지에서 상속받은 애들만 접근 가능, others는 안됨

Default 같은 패키지에서는 상속이든 아니든 접근가능, 패키지가 달라지면 접근 불가.

Private 상속관계 sub 뿐만 아니라 other 안됨, Super내 private에서만 접근 가능.

 

- 상속

 

자바에서 클래스 상속은 단일 상속만 지원된다.

명시적 상속 선언이 없으면 자동으로 Object가 부모클래스로서 상속된다.

Parent, super, base 클래스로 불려진다. child, sub, drived 클래스로 불린다.

자식 클래스에서는 Private 멤버와 생성자를 제외하고 부모의 모든 것을 상속 받는다.

상속은 Is a의 관계, 포함(Composit)관계는 다른 객체를 멤버로 선언한 경우, has a 관계

  • 클래스 : Circle, Shape, Point

Circle is a Shape è 상속관계로 설계 가능

Circle is a Point è 상속관계로 설계 불가능

Circle has a Point è 포함(Composit)관계로 설계 가능

- 메서드의 재정의 (override) : 부모로부터 상속받은 메서드의 선언은 동일하게 하고, 메서드 수행 내용을 변경합니다.

  1. AccessModifier는 동일하거나 더 넓어야 합니다.'
  2. 리턴타입은 반드시 동일해야한다.
  3. 메서드 이름은 반드시 동일해야한다.
  4. 메서드의 매개변수 리스트(순서,개수,타입)도 반드시 동일해야한다.

*** 자식클래스에서는 override메서드는 하나만 정의(선언)할 수 있고, overload 메서드는 여러 개 정의(선언)할 수 있다.

  • Final : class è 마지막 클래스, 종단 클래스, 상속 받을 수 없는 클래스, 보안상 중요한 클래스들을 설계

    (Java.lang.Math클래스는 상속안된다.)

  • Final : 멤버필드 è 상수
  • Final : 메서드 è 자식 클래스에서 override해서 기능을 변경하지 못하도록 설계 해야 하는 메서드에 선언

     

  • Abstract: 추상, 미완성 à 클래스와 메서드에 선언함, 부모클래스에서는 구현할 것이 아니고 자식클래스에서 반드시 구현해야 할 때 사용