[자바] 접근제한의 종류와 static

2021. 5. 21. 09:29·Archive/Java

 

멤버변수 선언

[접근제한자] [static/final] 데이터형 변수명;

 

1) 접근제한자

접근제한이란 클래스의 데이터나 메소드에 대해서 다른 클래스로부터 접근을 제한하는 것을 말한다.

 

- public : 접근을 제한하지 않는다. 다른 모든 클래스에서 사용 가능.

- protected : 해당 클래스와 동일한 패키지에 있거나 상속받은 클래스일 경우에만 사용 가능.

- default : 접근제어자를 명시하지 않은 경우의 디폴트 접근 제어자. 같은 패키지 내의 클래스들은 public 권한을 갖고 접근 가능

- private : 해당 클래스만이 이 멤버를 사용할 수 있다. 외부 객체에서는 절대로 접근할 수 없다.

 

 

 

2) static 

클래스변수(= static 변수)

객체변수(객체속성)는 객체가 생성될 때마다 각 객체 안의 속성변수들이 생성되지만, 클래스 변수는 클래스로부터 생성된 객체들의 수와 상관없이 하나만 생성된다. 

한 클래스로부터 생서된 모든 객체들은 클래스 변수를 공유한다.

클래스 변수를 이용하여 객체들 사이의 통신에 사용하거나 객체들의 공통 속성을 나타낼 수 있다.

객체변수와 달리 클래스변수(static 변수)는 클래스 이름을 통하여 접근한다.

 

3) static의 이해

객체들끼리 공유하고 싶은 정보가 있을 때 사용한다. (일명 깍두기)

필요에 의해 클래스를 만들고, 사용할 때는 new 연산자를 통해 객체로 만들어서 사용한다.

 

4) static과 객체의 관계

* static 변수를 클래스 변수(정적변수, 공용변수)라고 부른다.

 

객체는 클래스에서 생성(복사)되어 진다고 배웠다. 클래스 하나에서 무한대로 객체를 생성할 수 있고 그러한 객체는 모양은 같을지 모르지만, 전혀 다른 객체이다. 하지만, static이 붙은 변수는 객체 변수가 아닌 클래스 변수로써 객체가 생성되기 전에 이미 존재한다. (객체를 생성하지 않고 클래스 내 변수를 사용)

객체 생성과 상관없이 사용할 수 있는 필드와 메서드에 활용할 수 있다.

 

5) static의 장단점

객체 생성을 하지 않고도 사용할 수 있다는 것은 장점이지만, 한편으로 생각해보면 가비지콜렉터의 관리 밖에 있기 때문에 항상 메모리에 상주해 있다. 즉, 프로젝트가 커지고, 시스템이 오랜 시간 동안 돌아가게 되면 시스템 운영 속도가 점차 느려진다. 따라서 static의 사용은 신중해야 한다.

 

6) static / final

 

- final : 종단변수

public static void main(String[] args) {
		final double PI = 3.141592;
		double r = 3;
		double area = PI * r * r;
		double round = 2 * PI * r;
		System.out.println("반지름 "+r+"인 원의 넓이는 "+area);
		System.out.println("반지름 "+r+"인 원의 둘레는 "+round);
		r = 5; area =  PI * r * r; round = 2 * PI * r;
		//PI = 3.14; final변수는 상수. 값을 변경하지 못한다
	}

 

static 변수로 사용되는 대표적인 예는 아마도 상수(변하지 않는 수) 일 것이다. 만약 프로그래밍을 하다가 원주율을 빈번히 사용해야한다면 이러한 값은 상수(final 변수)로 정의해놓고 사용하는 편이 좋다.

package constant;
public class PiClass {
	public static final double PI = 3.141592653589793238462643383279;
}
public class MainClass {
	public static void main(String[] args) {
		System.out.println("원주율:"+PiClass.PI);
		//PiClass.PI = 3.14; 
        // final 클래스 변수(상수)이므로 변경  불가
	}
}

 

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

[자바] 상속 inheritance  (0) 2021.05.21
[자바] 패키지 package  (0) 2021.05.21
[자바] 객체지향 프로그래밍(OOP : Object Oriented Programming)  (0) 2021.05.16
[자바 문제] 구구단 (method, do~while문 사용)  (0) 2021.05.14
[자바] 메소드 method  (0) 2021.05.14
'Archive/Java' 카테고리의 다른 글
  • [자바] 상속 inheritance
  • [자바] 패키지 package
  • [자바] 객체지향 프로그래밍(OOP : Object Oriented Programming)
  • [자바 문제] 구구단 (method, do~while문 사용)
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • 전체
    오늘
    어제
    • 분류 전체보기 (172) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (6) N
        • Project Portfolio (6) N
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (85) N
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (11) N
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • GitHub
    • WikiDocs
  • 공지사항

  • 인기 글

  • 태그

    Le Petit Prince
    machine learning
    GIT
    맥 git
    머신러닝
    복합과거
    파이썬 크롤링
    불어 공부
    객체
    share.streamlit.io
    streamlit
    자바
    프로젝트 오일러
    파이썬
    python problem
    Python
    passe compose
    파이썬 문제
    Github
    python streamlit
    MySQL
    Stata
    초보자를 위한 파이썬 300제
    점프투파이썬 연습문제
    점프투파이썬 연습문제 풀이
    어린왕자 프랑스어
    어린왕자 불어
    파이썬 streamlit
    프랑스어 공부
    불어 관계대명사
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
J. Son
[자바] 접근제한의 종류와 static
상단으로

티스토리툴바