< modifier >
- 클래스, 변수, 메소드, 생성자를 선언할 때 앞에 붙어서
"접근가능한 범위" / "활용방법" 을 지정해주는 예약어들
클래스 변수 메소드 생성자
1. 접근제어자
public o o o o
protected x o o o
private x o o o
- 다른 클래스의 변수나 메소드 등을 가져와서 사용할 때,
그 클래스 객체를 만들어서 사용하고자 할때도, 제한이 있다. => " 접근제어자 "
< 접근제어자 >
private - 현재 클래스 내부에서만 사용 가능 / 객체 만들어도 못가져옴 => 쓰고싶으면 메소드로 가져가라
default(패키지상태) - 현재 클래스 + 현재 패키지 내부 사용 가능
protected - 현재 클래스 + 현재패키지 + 다른 패키지에서 상속받은 클래스
public - 무제한. 어떤 클래스에서도 사용 가능
(+) class D extends "package1". A { } => 다른 패키지 클래스 상속 => "패키지명" 명시 해줘야 한다.
2. < 활용방법을 알려주는 modifier > - static / final / abstract
abstract o x o x
static x o o x
final o o o x
< final 변수 >
=> 변수값 1번 할당 이후 수정 불가 => 상수 constant
< final 메소드>
=> Overriding 불가
< final class >
=> 상속 불가
static String nation = "대한민국"; // 공유변수로 줘도
p1.nation = "미국"; // 뒤에서 바꾸면 바뀐다.
=> static final String nation = "대한민국" // 이렇게 하면 안바뀌는 공유값
=> " static final " 세트로 많이많이 쓴다!
< static > // 정적이다 // + 공유 // (=클래스 변수)
=> 시작 부터 끝까지 정적인 값 유지한다. =>( 자체는 변하지 않지만,
Overriding 해서 사용하는 곳에서는 바꿔서 사용 가능)
=> 따로 별도의 영역(번지주소)에 모아둔다.(999번지) => final 까지 붙이면 고정공유값!
=> 객체들이 공유해서 사용하려면 미리 만들어져 있어야 겠지
( 안만들어진 시점에는 당연히 못쓴다. )
=> 그 Class 영역 내의 모든객체가 공유한다.
+ 다른 Class 에서는 객체생성없이 class 자체만으로도 소환 가능
Person.nation / p1.nation 둘다 가능하다.
< 활용 => 싱글톤 >
class의 생성자가 private 로 만들어졌을때, 객체 생성 불가능.
=> class 내에서 가져올 메소드나 변수를 static 으로 지정
=> 싱글톤
public Company getC1( ) { return c1; } (X) 이것도 객체 있어야 사용 가능
public static Compnay getC1( ){ return c1; } => 이렇게 하면, 객체 생성안하고 바로 사용 가능
Company c1 = compnay.getC1( );
c1 = c2 = c3 . . .
"유일한 고정값" 으로 생성 된다. => 싱글톤
=> instance 객체를 여러개 생성하면 문제가 될 때 사용한다. ex. 캘린터/시계 등
Stack Heap
p1:100번지 100: name = 김철민
age = 27
p2:150번지 150: name = 김지원
age =22
static 999번지 : nation = 대한민국
국적 공통
static String nation = "대한민국"
sout( p1.nation ) sout( p2.nation ) => 대한민국
< static method >
String name;
int age;
static String nation = "대한민국"; <= static 공유변수
(평 ㅡ 범)
그냥 (non-static) 메소드는 일반변수, static변수 당연히 사용 가능하다.
void showPerson( ){ sout(name / age / nation }
(특 ㅡ 수)
static void showNation( ){ <= static 공유메소드
sout ( nation ) ( O ) <= 공유가 되어있는 공유변수는 사용가능하지만
sout ( name ) ( X ) } <= 일반변수 (공유가 안되있잖아)
메소드가 공유메소든데 공유변수여야 그걸로 메소드를 만들지
=> static은 static 끼리 놀아라. (특 수)
'Back to the Java' 카테고리의 다른 글
클래스 안의 클래스 Inner class <- Outer class 에게 허락을 맡아라 (0) | 2022.06.27 |
---|---|
생성자 Constructor / vs GetterSetter / this (0) | 2022.06.24 |
배열을 품은 배열 - 이차 배열 (0) | 2022.06.23 |
참조형 DataType, Stack 과 Heap 메모리 저장 (0) | 2022.06.22 |
while + true + if + break; 조건 나중에 주기! (0) | 2022.06.22 |