옝옹
냠
옝옹
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • [LG유플러스]유레카 SW (5)
    • React (20)
    • JS (17)
    • TypeScript (5)
    • CSS & HTML (1)
    • 알고리즘 (11)
    • JAVA (20)
    • GIT (1)
    • 자격증 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 템플릿리터럴
  • js
  • 접근제한자
  • map
  • 타입스크립트
  • continue문
  • 기본api클래스
  • ==
  • java.util패키지
  • indexOf()
  • useCallback
  • 혼자 공부하는 자바
  • 혼자공부하는자바
  • 인스턴스멤버
  • useEffect
  • break문
  • useMemo
  • sort() 메서드
  • 노마드코더
  • java
  • switch문
  • reduce
  • map() 함수
  • fillter
  • TypeScript
  • join()
  • 함수선언
  • 화살표함수
  • 자바스트립트
  • JavaScript
  • 코드스플리팅
  • 백준
  • useState
  • 변수선언
  • toFixed
  • reverse() 메서드
  • 자바스크립트
  • 리액트
  • 타입변환
  • join() 메서드
  • 정적멤버
  • 리액트를다루는기술
  • Node.js
  • template literal
  • useRef
  • do-while문
  • While문
  • java.lang패키지
  • match()
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
옝옹

냠

JAVA

인스턴스 멤버와 정적 멤버

2022. 10. 13. 13:18

인스턴스 멤버

객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드를 말하는데, 이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부른다.

  • 인스턴스 멤버 선언
// Car클래스에 인스턴스 필드 gas와 인스턴스 메소드 setSpeed()를 선언
public class Car {
    //필드
    int gas;
    //메소드
    void setSpeed(int speed) { ••• }
}
  • this
    •  객체 내부에서도 인스턴스 멤버에 접근하기 위해 this를 사용
    • 객체는 자신을 this라고 한다.

정적 멤버

클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말하는데, 이들을 각각 정적 필드, 정적 메소드라고 부른다.

  • 정적 멤버 선언
    • 정적 필드와 정적 메소드를 선언하려면 필드와 메소드 선언 시 static 키워드를 추가적으로 붙이면 된다.
public class 클래스 {
	//정적 필드
	static 타입 필드 [= 초기값];

	//정적 메소드 
	static 리턴 타입 메소드( 매개변수선언, • • ) { ... }
}

 * 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드로 선언하고, 객체마다 가지고 있을 필요가 없는 공용 데이터라면 정적 필드로 선언하는 것이 좋다.

  • 정적 멤버 사용
    • 클래스 이름과 함께 도트(.) 연산자로 접근
클래스.필드;
클래스.메소드( 매개값, … );
  • 정적 메소드 선언 시 주의할 점
    • 객체가 없어도 실행된다는 특징 때문에 정적 메소드를 선언할 때는 이들 내부에 인스턴스 필드나 인 
      스턴스 메소드를 사용할 수 없다.
    • 객체 자신의 참조인 this 키워드도 사용이 불가능
// 정적 메소드에서 인스턴스 멤버를 사용하고 싶다면 다음과 같이 객체를 먼저 생성하고 참조 변수로 접근
static void method3() { 
    ClassName obj = new ClassName(); 
    obj.fieldl = 10;
    obj.methodl();
}

싱글톤

  • 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있습니다. 단 하나만 생성된다고 해서 이 객체를 싱글톤이라고 한다.
  • 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다.
  • 외부에서 생성자 호출을 막기 위해 private를 붙여준다.
// 싱글톤을 만드는 코드
public class 클래스 {
    //정적 필드 - private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 막음
    private static 클래스 singleton = new 클래스();
    
    //생성자 
    private 클래스() {}
    
    //정적 메소드 - getlnstanceO를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴
    static 클래스 getlnstance() {
    	return singleton;
    }
}

final 필드

  • 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다.
  • 초기값을 줄 수 있는 방법
    • (단순 값인 경우) 필드 선언시에 주기
    • (복잡한 초기화 코드, 객체 생성시) 생성자에게 주기 

상수

  • 불변의 값을 저장하는 필드  (ex) 원주율, 지구의 무게 및 둘레
  • 객체마다 저장할 필요가 없는 공용성을 띤다.
  • static이면서 final 이어야 한다.
static final double PI = 3.14159;
static final double EARTH_RADIUS = 6400;
static final double EARTH_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;

확인문제

1. 인스턴스 멤버와 정적 멤버에 대한 설명 중 맞는 것에 O표, 틀린 것에 X표 하세요. 

① 정적 멤버는 static으로 선언된 필드와 메소드를 말한다. ( O )
② 인스턴스 필드는 생성자에서 초기화될 수 없다. ( X )

-> 인스턴스 필드는 생성자에서는 초기화될 수 있지만 정적 블록에서 초기화 될 수는 없다.
③ 정적 필드와 메소드는 객체 생성 없이 클래스를 통해 접근할 수 있다.( O )
④ 인스턴스 필드와 메소드는 객체를 생성하고 사용해야 한다. ( O )

 

2. final 필드와상수(static final)에 대한 설명으로 틀린 것은 무엇입니까?
① final 필드와 상수는 초기값이 저장되면 값을 변경할 수 없다.

② final 필드와 상수는 생성자에서 초기화될 수 있다. (X)

-> final 필드는 생성자에서 초기화될 수 있다. 하지만 상수는 선언 시 값을 주고나 정적 블록에서 초기화가 가능하다.

③ 상수의 이름은 대문자로 작성하는 것이 관례이다.

④ 상수는 객체 생성 없이 클래스를 통해 사용할 수 있다.

 

3. ShopService 객체를 싱글톤으로 만들고 싶습니다. ShopServiceExample 클래스에서 ShopService의 getlnstance() 메소드로 싱글톤을 얻을 수 있도록 ShopService 클래스를 작성해보세요.

package ch06.exam05;

public class ShopService {
    private static ShopService singleton = new ShopService();
    
    private ShopServiceO {}
    
    static ShopService getlnstance() { 
    	return singleton;
    }
}

 

저작자표시 비영리 변경금지 (새창열림)

'JAVA' 카테고리의 다른 글

상속  (0) 2022.10.31
패키지와 접근 제한자  (0) 2022.10.13
메소드  (0) 2022.10.13
생성자  (0) 2022.10.12
열거 타입  (1) 2022.09.26
    'JAVA' 카테고리의 다른 글
    • 상속
    • 패키지와 접근 제한자
    • 메소드
    • 생성자
    옝옹
    옝옹

    티스토리툴바