여니의 성장 diary
article thumbnail
728x90
반응형

 

돌아온 금요일 !!!!!!!!!!!!!!!!!!! 오늘 하루만 잘 보내고나면 다시 3일 연휴라서 신난당 !!!!

그래서 그런지 오전 내내 시간도 안가고 졸리고 헤롱헤롱 했지만 겨우 버텨내고

오늘 수업 내용도 빼먹지 않고 기록하기 :)


정적 필드와 정적 메소드 (static field & static method)

 

어제 구분해보았던 인스턴스 멤버와 정적 멤버에 대해 다시 한 번 복습!

 

인스턴스 멤버의 경우에는 객체를 생성해야만 접근하여 사용이 가능한 반면,

Static(정적) 멤버클래스에 소속된 멤버(필드, 메소드)로써 객체를 생성하지 않고,

클래스에 바로 접근하여 사용할 수 있는 것이 특징이다.

 

내/외부 클래스 구분없이 인스턴스 메소드는 객체를 생성한 후 '변수명.메소드명()'으로 호출이 가능하고,

스태틱 메소드는 객체 생성 없이도 '클래스명.메소드명()'으로 호출하여 사용할 수 있는데

스태틱 메소드의 경우 동일 클래스 내부에서 호출할 때에는 클래스명을 생략해서 사용할 수 있다.

 

정적 메소드는 외부 클래스에서 '변수명.메소드명()'의 형태로도 활용은 가능하지만 권장하지는 않는다.

외부 클래스에서 접근할 때에는 반드시 클래스명을 명시하여 사용하는 것이 좋다!

 

 


정적 블록 (static block)

 

정적 블록정적 필드를 초기화 할 수 있는 정적 초기화 블록이다.

 

정적 필드는 필드값을 모든 클래스에서 공유하는 고정된 필드이기 때문에 객체를 생성하지 않아도 활용이 가능하고,

정적필드의 초기화는 기본생성자에서도 가능하고, static 블록에서도 가능하다.

 

static 블록에는 반드시 static 필드와 메소드만 담을 수 있다는 점을 유의해야한다!

 

 

반대로 인스턴스 필드는 static 내에서 초기화 할 수 없다. 

인스턴스 필드는 객체를 생성한 후에 값을 저장할 수 있기 때문에 객체 생성이 필요하지않은 static에서는 초기화가 불가능하다. 따라서 위의 코드와 같이 static 블록 내에서 인스턴스 필드인 color를 초기화하는 코드를 작성하면 컴파일 오류가 발생한다.

 

정적멤버 - 정적 필드, 정적 메소드, 객체생성 유무 상관없음

비정적멤버(인스턴스멤버) - 생성자, 인스턴스 필드, 인스턴스 메소드, 객체 생성 후에 사용 가능

 

정적블록 - static 블록, static 메소드

비정적블록 - 생성자, 인스턴스 메소드

 

 

정적 멤버와 비정적 멤버를 구분하여 오류 발생을 확인하고, 그 내용을 모두 기록한 코드이다.


SingleTone(싱글톤)

 

Singleton(싱글톤)이란 하나의 애플리케이션 내에서 단 하나만 생성되는 객체를 뜻한다.

싱글톤은 외부에서 new 연산자로 생성자를 호출할 수 없도록 막기 위해

접근 제한자 private를 생성자 앞에 붙여 자신의 객체를 생성하여 초기화하는 것으로 만들 수 있다.

 

외부 클래스에서 호출할 수 있는 static 메소드인 getInstance()를 선언하여

static 필드에서 참조하고 있는 자신의 객체를 리턴한다.

 

 


final 필드와 상수

 

final 필드 최초 한 번 초기화가 되고나면 값을 변경할 수 없는 필드이다.

외부에서 사용될 때 지정된 값을 변경하여 사용할 수 없도록 만들어둔 필드라고 생각하면 될 것 같다.

 

final 필드는 재할당하여 값을 변경할 수 없기 때문에 반드시 초기화를 해준 다음 사용이 가능하고,

초기화를 하지 않으면 메인메소드에서 호출 시 컴파일 에러가 발생한다.

 

final 필드를 초기화 하는 방법은 필드를 선언할 때 초기화하는 방법과 생성자에서 초기화하는 방법 2가지이고,

생성자에서 초기화 할 때에는 직접 값을 넣어 초기화하거나 생성자의 매개값으로 초기화가 가능하다.

 

상수는 final 필드 중 하나인데 정적 final 필드라고 하여 static final 필드를 상수라 한다.

final 필드는 객체마다 여러가지 값으로 초기화 될 수 있고, 지정된 값이 아니지만

상수 객체마다 값이 바뀌지 않는 공용 데이터이고, 이름은 대부분 대문자로 작성된다.


접근제한자: public, default, protected, private

접근제한자(Acess Modifier)란?

클래스 및 클래스의 구성 멤버에 대한 접근을 제한하는 역할로써

public, protected, default private 4가지이다.

 

=> 클래스, 멤버, 생성자, 메소드 모두 접근제한자를 생략했을 경우에는 default로 설정된다.

클래스는 default를 제외한 접근제한자 public만을 사용할 수 있고,

필드, 생성자, 메소드는 public, protected, private 접근제한자를 모두 사용할 수 있다.

 

 

접근제한자 public을 사용하면 모든 패키지와 클래스에서 객체를 생성하여 활용할 수 있지만

접근제한자 default로 설정된 클래스의 경우에는 동일한 패키지 내 외부 클래스에서는 인스턴스를 생성하여 사용할 수 있지만 서로 다른 패키지의 외부 클래스에서는 해당 클래스의 인스턴스를 생성하여 사용할 수 없다.

 

접근제한자 private모든 외부 클래스에서 접근할 수 없도록 제한하기 때문에

해당 클래스 내에서만 호출하여 활용할 수 있다.
                                                                      

<접근제한자 활용>

클래스 : public

- public, default


필드, 생성자, 메소드 : public, protected, private
- public, default, protected, private

Getter & Setter

 

 

마지막으로 Getter 과 Setter 메소드를 생성하고 활용하보았다.

Getter, Setter 메소드는 접근제한자 private 필드를 읽기위한 읽기전용 메소드

외부클래스에서 입력한 값을 필드값으로 수정하여 유효성 검사를 해볼 수 있는 메소드이다.

 

두 메소드의 이름은 필드의 첫글자를 대문자로 변경한 후 접두사로 get, set을 붙여 활용한다.

그리고 getter 메소드와 setter 메소드의 접근제한자는 public으로 해야한다.

 

CarDemo 클래스에서는 getter 메소드와 setter 메소드로 private 필드를 호출하여 정상적으로 실행되었고,

CarMain 클래스 에서는 private 필드를 직접 호출하여 컴파일 에러가 발생하는 것을 확인하였다.

 

 


어제 수업 마치고 비콘 퇴실 안찍고 룰루랄라 집에 가는 바람에

하루종일 수업 듣고도 1회 결석으로 처리돼서 엄청 속상하고 자괴감에 잠시 빠졌었지만

숫자로 나타나는 결과보다 노력하는 과정이 더 중요하다며 애써 위안삼았다...TㅇT

 

이번 연휴 3일도 게을리하지 않기 위한 목표!

 

1. 이것이 자바다 교재 05장 확인문제 풀기

2. 자바의 정석 01~05 확인문제 풀기

3. 백준 알고리즘 활용 방법 익히기

728x90
반응형
profile

여니의 성장 diary

@pponyo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!