자바 용어 요약 정리
* 클래스 @
객체를 여러 개 만들기 위해서는 틀이 필요함. 그 틀에 해당하는 것이 클래스임
클래스 - 객체를 생성하기 위한 틀
- 멤버변수와 메서드로 구성됨
클래스의 변수나 메서드를 사용하기 위해서는 객체를 생성해야 함
* 객체, 인스턴스
객체
상태 정보(속성, 데이터)와 행동(기능)으로 구성됨
속성은 변수로/기능은 메서드로 표현
클래스로부터 객체를 만드는 과정을 클래스의 '인스턴스화 (instantiation)'라고 함
어떤 클래스로부터 만들어진 객체를 그 클래스의 '인스턴스 (instance)'라고 함
객체와 인스턴스
객체 - 모든 인스턴스를 대표하는 포괄적인 의미
인스턴스 - 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미
클래스가 메모리에 load된 것
클래스는 코드, 이 코드를 메모리에 띄운 것이 객체(object)
클래스는 직접 사용할 수 없고 클래스를 통해 객체를 생성해야만
그 객체를 사용할 수 있음
*클래스변수(static변수)
- 개별 객체에 소속되지 않으며 클래스에 직접 소속됨
- 객체가 아무리 많이 생성되어도 static 변수는 단 하나만 생성되며, 객체가 전혀 없어도 하나는 생성됨
- 메모리에 딱 한번만 생성되며 모든 객체가 공유함
- 클래스 차원에서 하나만 생성되어 모든 객체가 공유함
static 변수의 초기화 시점
- jvm에 의해 해당 클래스가 메모리에 로드될 때
static변수의 소멸시점
- 프로그램이 종료될 때
cf. 인스턴스 변수의 생성 시점- 객체가 생성될 때
static - 클래스의, 공통적인 이라는 의미를 내포하고 있다
static변수에 접근할 때 => 클래스명.static변수
static변수를 클래스변수라고도 부름
멤버변수(인스턴스변수), 필드(field)
* 생성자(Constructor)
생성자 - 멤버변수의 초기화를 위한 목적의 메서드
객체가 생성될 때 자동으로 호출되어 제일 먼저 실행되는 메서드
※ 생성자 만드는 방법
생성자 이름은 클래스명과 동일해야 함
매개변수는 있을 수 있으나 반환타입은 없다
기본생성자(매개변수 없는 생성자)는 컴파일러가 자동으로 만들어줌
Account(){
}
단, 생성자가 하나도 없으면 컴파일러가 자동으로 생성자를 만들지만
하나라도 생성자가 만들어져 있으면 컴파일러는 더 이상 자동으로 기본 생성자를 만들어주지 않음
* this, super
this
- 자기 자신을 가리키는 this
- 자신의 인스턴스를 지칭함
- 자신의 인스턴스의 주소가 담길 참조변수
- 자신의 멤버를 가리킬 때 사용함
this.멤버
- 클래스 디자인시에만 사용 가능
※ this - 자기 자신을 가리키는 this
[1] this.멤버 : 자신의 멤버를 참조하는 this
[2] this() : 자신의 생성자를 호출함
자신의 클래스에서 다른 생성자를 호출하는 방법
1) 이름 : this()
2) 호출하는 위치 : 생성자의 첫줄에서 호출해야 함
this - 인스턴스의 참조값(주소값)이 들어감, 참조변수,
static에서는 사용불가
클래스의 디자인시에만 사용
※ super
[1] super.멤버 - 부모의 멤버를 참조하는 super
[2] super() - 부모 생성자를 호출
* 상속
상속 - 부모 클래스의 멤버를 물려받아서 자식클래스에서 그대로 사용할 수 있는 것.
- 자식클래스에서는 부모의 멤버를 그대로 사용하고, 추가로 필요한 멤버를 더 만들 수 있다.
- 자식의 멤버개수가 부모보다 많거나 같다.
- 자식 클래스들의 공통적인 부분은 부모 클래스에서 관리하고,
자식 클래스는 자신에 정의된 멤버들만 관리
- 기존 클래스 재사용, 중복 제거 => 생산성, 유지보수에 좋다
=> extends 키워드 이용
부모 클래스=상위클래스(super)=기본 클래스(base)=조상 클래스
자식 클래스=하위클래스(sub)=파생클래스(derived)=자손 클래스
* 오버라이딩 @
- 상속관계에서 부모클래스로부터 상속받은 메서드의 내용을 변경해서 사용하는 것
- 자식 클래스에서 부모 클래스의 메서드의 내용을 재정의하는 것
- 메서드의 선언부가 동일해야 함
오버라이딩의 조건
[1] 부모 메서드의 선언부와 완전히 일치해야 함
- 메서드이름, 매개변수, 반환타입이 같아야 함
[2] 접근 제한자는 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
예) 부모 메서드가 protected라면 자식의 오버라이딩 메서드는
protected나 public이어야 함
[3] 부모 클래스의 메서드보다 더 많은 수의 예외를 선언할 수 없다
* 접근 제한자(접근 제어자)
- 클래스나 멤버를 외부에서 접근하지 못하도록 막는 역할
public > protected > default > private
[1] private - 같은 클래스에서만 접근할 수 있다
[2] default(기본값) - 같은 패키지에서만 접근할 수 있다
[3] protected - 같은 패키지는 물록이고, 다른 패키지라 할지라도
상속관계에서는 접근할 수 있다
[4] public - 어디에서든 접근할 수 있다
-------------------------------------------------------
대상 사용가능한 접근제한자
-------------------------------------------------------
클래스, 생성자 - public, default
메서드, 멤버변수 - public, protected, default, private
지역변수 - 사용못함
--------------------------------------------------------
* static @
static으로 선언-클래스의 복사물인 인스턴스로 참조하지 않고 클래스 차원에서 바로 호출이 가능
클래스에 대한 인스턴스를 생성하지 않아도 해당 클래스의 메서드를 호출해서 사용할 수 있음
클래스의 이름으로 접근
클래스명.static메서드명()
- static메서드는 클래스 차원에서의 동작을 처리함
- 객체 생성과 상관없이 클래스명으로 바로 호출이 가능함
- static메서드에서는 this를 사용할 수 없음
- static메서드에서는 static 변수만 사용할 수 있다
(인스턴스 변수는 사용 불가)
* final
1) class - 클래스앞에 final이 붙으면, 상속할 수 없는 클래스가 됨
부모 클래스가 될 수 없다
2) 메서드 - 오버라이딩할 수 없게 됨
3) 멤버변수 - 값을 변경할 수 없는 상수가 됨
4) 지역변수 - 상수가 됨
final변수는 인스턴스마다 서로 다른 값을 가질 수 있다
- 선언시 초기화하지 않고, 생성자에서 단 한번 초기화할 수 있다
static final변수는 클래스 차원에서 하나만 생성되고
모든 객체가 공유함
- 선언시 초기화해야 함
다형성 @
- 여러가지 형태를 가질 수 있는 능력
- 부모의 참조변수로 자식의 인스턴스를 참조하도록 함으로써 다형성이 구현됨
- 부모 참조변수로 자식들을 통합관리할 수 있다
※ 다형성에서 멤버에 대한 규정
- 부모의 참조변수로는 부모의 멤버만 사용할 수 있다
(자식만의 멤버는 접근 불가)
- 단, 오버라이딩 메서드가 있을 때는 자식의 오버라이딩 메서드가 호출됨
Shapes sh2 = new Circle();
//=> 부모의 참조변수로 자식의 인스턴스를 참조
//=> 부모에 자식을 담는다
추상 클래스(abstract class)
- 미완성 클래스, 미완성 메서드가 포함된 클래스
- 상속관계를 형성하기 위해 사용
(상속관계를 형성하되 부모의 인스턴스를 생성할 필요가 없을 때)
- 프로그램 설계단계에서 많이 사용
- 추상메서드가 포함되어 있으면 추상클래스가 됨
추상메서드가 포함되어 있지 않더라도 class앞에
abstract을 붙이면 추상클래스가 됨
- 추상 클래스는 객체 생성할 수 없다
- 자식 클래스가 추상메서드를 모두 구현하면
자식 클래스는 객체 생성할 수 있게 됨
인터페이스(interface)
- 일종의 추상 클래스
- 메서드의 목록만을 나열한 것으로 클래스의 뼈대만을 가지고 있다
- 추상메서드와 상수만 멤버로 가질 수 있다
- 일종의 약속, 계약으로 최소한의 계약사항을 명시한 것
- 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용됨
- 인터페이스는 객체 생성불가
추상메서드는 public abstract 이어야 하고
상수는 public static final이어야 함
-> 생략 가능함