본문 바로가기
Programming/Java

instance, static, package, access modifier

인스턴스 멤버: 객체마다 가진 멤버. new로 생성하는 것들.

정적 멤버: 객체와 무관한 것. 클래스 코드(메소드 영역). 이 내에서는 인스턴스, this 사용 불가

                 객체를 생성하지 않고 사용할 수 있는 필드와 메소드

ex) main 메소드

 

this: 객체 내에서 인스턴스 멤버에 접근하기위해 사용.

static: 정적 멤버 호출법

 

[선택 기준]

객체마다 다를 수 있는 필드 값 -> 인스턴스 멤버

객체마다 고정될 필드 값 -> 정적 멤버

 

result1 : 314.159

result2 : 15

result3 : 5

static double pi <- 모든 계산기마다 값이 동일하므로 정적으로 선언

plus minus는 외부에서 주어진 값으로 같은 일을 수행하므로 정적으로 선언

 

정적 메소드는 참조변수로도 접근 可 but 클래스 이름으로 접근하는걸 권장

 

 

 

 

 

 

Singleton(싱글톤): 전체 프로그램에서 객체는 1개만 만드는 코딩 기법. 민감한 개인정보와 관련된 경우 써야 함.

new를 통한 생성자 호출 불가하도록 private(접근 제한자) 사용 후 정적필드 선언. 

외부에서 호출하도록 getinstance() 선언. 정적필드에서 참조하는 자신 객체 리턴

 

 

 

 

 

Final 필드: 초기값 설정시 실행 도중 수정 불가능한 필드. (수정불가)

 

 

 

Static final(상수): 불변의 값. 클래스에만 존재. 이름은 관례적으로 모두 대문자로 지정

fiinal 필드는 객체마다 생성되면서 초기화값을 저장하므로 불변값이 아님.

 

 

 

 

Package(패키지): 클래스를 체계적으로 관리하기 위한 상위 폴더 개념. 가능한 이름 중복 없도록 소문자로 고유값 작성

클래스 이름 같아도 패키지 다르면 다른 클래스로 인식.

 

지금까지 예제를 보면 첫 줄 package로 어디에 속할지 선언해왔다.

 

 

같은 패키지 sec06에 하위 패키지 exam02 그리고 그 하위 패키지 hankook, hyndai, kumho, mycompany가 있다.

패키지이름 '.'로 상하위를 구분한다. '.'는 파일디렉토리처럼 계속 확장이 可

 

같은 패키지는 반드시 하위까지 모두 같은 패키지를 의미한다.

 

위 사진의 경우 상위패키지가 sec06.exam02로 같지만 하위 4개가 모두 다른 패키지이므로 다른 패키지이다.

 

 

 

 

 

import: 사용하고자하는 클래스 또는 인터페이스가 다른 패키지에 속한 경우 import로 가져온다.

package sec06.exam02.mycompany;

import sec06.exam02.hankook.*;  // 같은 패키지에 있는 것을 호출할 때 * 사용
import sec06.exam02.kumho.*;
import sec06.exam02.hyndai.Engine;

public class Car {
	//필드
	Engine engine = new Engine(); // 엔진은 현대에만 있으니 그냥 호출 可
	SnowTire tire1 = new SnowTire(); // SnowTire는 한국에만 있으니 그냥 호출 可
	BigWidthTire tire2 = new BigWidthTire(); // BigWidthTire는 금호에만 있으니 그냥 호출 可
	sec06.exam02.hankook.Tire tire3 = new sec06.exam02.hankook.Tire();
	sec06.exam02.kumho.Tire tire4 = new sec06.exam02.kumho.Tire();
}    // Tire 클래스 이름이 같으니 new로 작성할 때 풀 네임을 작성해야한다. (좋은 코드 아님)

import에서 사용하는 클래스가 동일한 패키지 소속이라면 *사용한다.

 

 

 

 

Access modifier(접근 제한자)

public: 외부 클래스가 자유롭게 사용 可

protected: 같은 패키지, 자식 클래스에서 사용 可 (상속 개념이 default와 차이있음)

default: 같은 패키지 소속된 클래스에서만 사용 可. 아무것도 선언 없을 때 자동으로 지정되는 것.

private: 외부에서 사용 불가. 클래스 내부만 可 

예제1
예제2

 

 

 

 

스프링부트에서 자세히 다룰 개념인 set과 get

Setter: 외부 값 받아 필드 값을 변경하는 것이 목적. 유효값만 필드 지정 可. ex) set이라는 글자가 앞에 붙음

Getter: 외부로 필드 값 전달 목적. ex) get이라는 글자가 앞에 붙음.

 

필드는 외부 접근 제한하고 메소드만 공개해서 메소드를 통해 필드에 접근하도록 유도하는 목적이다. (안정성)

-50으로 입력된 현재속도는 0으로 출력

60으로 입력된 속도는 stop으로 인해 현재속도 0으로 출력. stop없으면 60 그대로 출력.

 

boolean 필드타입은 get이 아니라 is로 시작하는게 관례이다. (isStop)

 

 

 

 

 

 

 

728x90
반응형

'Programming > Java' 카테고리의 다른 글

Interface (인터페이스)  (0) 2023.10.17
Inheritance(상속)  (1) 2023.10.16
OOP(Object Oriented Programming) 객체지향 프로그래밍  (0) 2023.10.13
참조타입, 배열, 열거타입  (0) 2023.10.12
java basic (기본 문법)  (0) 2023.10.11