BEDAY 14
static
인스턴스 변수:
static 이 안붙은 변수
인스턴스를 생성한 다음에(new 생성자(); 호출된 다음에)
사용할 수 있는 변수
인스턴스 메소드:
static 이 안 붙은 메소드
인스턴스를 생성한 다음에(new 생성자(); 호출된 다음에)
사용할 수 있는 메소드
클래스 변수(static 변수):
클래스의 멤버 변수들 중에서,
인스턴스를 생성하지 않아도 사용할 수 있는 변수
클래스 메소드(static 메소드):
인스턴스를 생성하지 않아도 사용할 수 있는 메소드
public static void test() {
System.out.println("Hello, Java!");
}
public void test2() {
System.out.println("안녕하세요!");
}
public static void main(String[] args) {
test();
// test2(); *오류*
Static01Main tc = new Static01Main();
tc.test2();
}
ㄴstatic 안에서는 static이 아닌것을 사용할 수 없다.
인스턴수 변수/메소드 (non-static)는 인스턴스 생성한 후에 사용가능
클래스 변수 / 메소드 특징 (static)
1. 메모리의 '메소드 영역'에 클래스가 로드 될때(프로그램 시작될때) '한번만' 생긴다
2. 인스턴스가 생성되지 않아도 사용할 수 있다.
- 클래스이름.static변수, 클래스이름.static메소드() <-- 요렇게 사용한다
3. 모든 인스턴스는 하나의 static 변수/메소드를 '공유'한다.
Singleton 디자인 패턴
객체가 어떠한 상황에서도 인스턴스가 하나이상 존재하면 안되는 상황에서 쓰는 디자인 패턴
* access modifier(접근 제어자)와 static을 적용한 대표적인 사례
public Test() {
num = 100;
}
private static Test instance = null;
public static Test getInstance() {
//기존에 인스턴스가 없으면 새로 만들고
//있었으면 있던 인스턴스를 리턴
if(instance==null ) {
instance = new Test();
}
return instance;
}
만드는 순서
1. 생성자 만들고
2. 래퍼랜싱할 변수 만들고
3. getInstance() 제공하기

ㄴ저장되는 과정
final
변경할 수 없는 상수
final 지역변수

final 지역변수 선언 방법
* 한번 값이 초기화 되면 더이상 변경할수 없다.
final 멤버변수

* final 멤버 변수는 반드시 선언과 동시에 초기화 (혹은 생성자에서 초기화) 해야 한다.
상속 (Inheritance)
상위클래스를 상속받아서 하위클래스를 정의하는 방법
class 하위클래스 extends 상위클래스
자바 에선 오로지 '하나의 부모'로부터 상속받을수 있음 (단일 상속) 다중 상속 허용하지 않음
(용어)
Super Class(상위 클래스), Parent Class(부모/조상 클래스), Basic Class(기본 클래스)
Sub Class(하위 클래스), Child Class(자식 클래스), Derived Class(유도 클래스)
※ 상속받는다..(동사) inherit , subclass
sub class에서는 super class가 가지고 있는 멤버 변수들은 선언하지 않아도 사용할 수 있다.
super class에 없는 멤버 변수만 선언해 주면 됨
상속의 이점 :
상속을 통하여 기존의 객체를 그대로 활용하면서, 새로운 객체에서
추가, 변경되는 부분만 작성함으로 소프트웨어 개발 효율을 높일수 있다.
java.lang.Object
자바의 모든 클래스는 java.lang.Object로부터 상속 받는다.
java.lang.Object 클래스는 모든 클래스의 부모클래스이다.
Object 클래스에 있는 메소드를 다른 클래스에서도 사용 가능
- to Stiring() : 객체의 대한 정보를 문자열로 리턴해줄 때 쓰는 메소드 (Object의 메소드)
상속에서 생성자 호출순서
1. 자식 클래스의 생성자에서 명시적으로 부모 클래스의 생성자가
호출되지 않으면, 자동으로 부모 클래스의 "디폴트 생성자"가 호출됨.
2. 자식 클래스의 생성자에서 명시적으로 부모 클래스의 생성자를 호출하기도 함
1) super(...) 키워드 사용 -> 부모 클래스의 생성자를 호출
2) (주의) super는 항상 제일 처음에 호출되어야 함
****부모가 먼저 생성되고 자식이 생겨야 함*****
3) 부모 클래스에 디폴트 생성자가 없는 경우도 있을 수 있다.
그런 경우에는 다른 생성자를 "반드시 명시적으로 호출"해 줘야만 함.
어떤 경우에 상속으로 객체를 설계하나?
HAS-A 관계 ===> 멤버로 설계
Car, Tire
Car is-a Tire (X)
Tire is-a Car (X)
Car has-a Tire (OK)
IS-A 관계 ===> 상속으로 설계
Vehicle is-a Car (NO)
Car is-a Vehicle (OK)
HybricCar is-a Car (OK)
'Language > JAVA1' 카테고리의 다른 글
| [JAVA] (1) | 2024.01.06 |
|---|---|
| Singlton 디자인 패턴 응용 (0) | 2022.02.12 |
| [JAVA 12] 클래스, 접근권한 수식어 (접근제한자) (0) | 2022.02.02 |
| [JAVA 11] 정규 표현식, 클래스 (0) | 2022.02.02 |
| [JAVA 10] 문자열 메소드, 정규표현식 (0) | 2022.01.31 |