Java/Java 기초

this, static, 상속 개념

nickmorohe 2023. 12. 18. 14:31

1. 클래스

 

(1) this


객체 자기 자신을 의미


(2) this() 자기자신의 생성자를 의미


생성자 내부에서만 사용이 가능하며 최상단에 작성해야한다
-> 생성자 내부에서 나의 다른 생성자를 호출할 때 사용한다


2. static

 

(1) static 맴버


프로그램이 실행되는 동안 계속해서 유지되는 저장공간
프로그램이 시작되면 생성되고 프로그램이 종료될 때까지 유지된다

정적맴버는 클래스 자체에 속하는 맴버로 클래스를 통해 접근 가능
객체를 생성하지 않아도 사용할 수 있다


정적변수(static variables)와 정적 메소드(static method)
1) 정적변수 : 클래스의 모든 인스턴스에서 동일한 값을 공유, 객체 간에 정보 공유에 사용
2) 정적메소드 : 객체를 생성하지 않아도 호출 가능, 유틸리티 메소드 등에 사용


(2) dynamic 


프로그램이 실행중에 생성되고 필요하지 않으면 메모리에서 해제된다


(3) 맴버 변수의 종류


static 붙은 변수 : static 변수, 정적변수, 클래스 변수
static 안 붙은 변수 : 인스턴스 변수

static 붙은 메소드 : static 메소드, 정적메소드, 클래스메소드
static 안 붙은 메소드 : 인스턴스 메소드


(4) static 변수와 static 메소드


static이 붙은 메소드나 변수는 객체를 생성하지 않아도 클래스 이름을 통해 직접 사용가능하다
객체의 생성과는 관계없이 클래스 로딩시에 메모리에 올라가며 프로그램이 끝날때까지 유지된다

static 변수는 객체와 상관없이 하나의 저장공간이므로 모든 객체가 공유해서 사용한다
즉, 모든 객체에서 공통으로 사용되는 변수에 static을 붙이는 것을 고려한다

static 메소드는 인스턴스 맴버를 직접 사용할 수 없다
static 메소드가 메모리에서 사용준비가 끝나고 인스턴스 맴버 new를 사용하여 객체를 생성하기전까지 
사용할 수 없기 때문이다

클래스명.변수명 또는 클래스명.메소드명으로 사용한다


(5) static 블록


클래스가 로드될 때 실행되는 블록이다
정적 맴버를 초기화 하는데 사용된다

로드시점 : 클래스가 처음 로드될 때 실행된다
- 클래스의 객체가 생성될 때(클래스 인스턴스화)
- 클래스의 정적맴버에 접근할 때
- 클래스를 사용하는 다른 클래스가 로드될 때(참조하려는 클래스에 의존성이 있는 경우)


3. 변수


(1) 지역변수(local) :  클래스의 중괄호 영역은 포함되지 않으며 메소드나 메소드 안의 중괄호 영역에서 선언된 변수
(2) 매개변수(parameter) :  메소드의 소괄호 안에서 선언된 변수
(지역변수와 마찬가지로 해당 메소드 안에서만 사용가능)
(3) 인스턴스 변수(instance) : 클래스 중괄호 영역에서 선언된 변수
(3) 정적 변수(static) : 객체 간 공유, 편의성

 

4. final


final 변수 상수(값 변경 불가)
static final 자료형 상수명 = 값;
상수명은 대문자로 작성, 단어가 바뀔 때 _로 표기(스네이크 표기법)
final 메소드 오버라이딩 불가
final 클래스 상속 불가


5. 상속(inheritance)


기존에 선언된 클래스의 맴버(생성자는 제외)를 새롭게 만들 클래스에서 사용하고 싶을 때
상속을 받고 새로운 기능만 추가한다
여러 클래스를 선언시 맴버가 겹치는 경우, 부모클래스를 먼저 선언하고 공통멤버를 자식 클래스들에게 상속해준다



(1) 상속문법


class Parents{
                //부모 맴버(필드, 메소드)
}

class Child extends Parents{
                //부모멤버
                //자식멤버
}

Parents : 부모클래스, 슈퍼클래스, 기반클래스, 상위클래스
Child : 자식클래스, 서브클래스, 파생클래스, 하위클래스
※ 자바에서 상속은 단일상속만 지원한다