[Java] static

2024. 7. 9. 17:32· Java
목차
  1. 1. static
  2. 1-1. static 변수
  3. 1-2. static 메서드

1. static

  • 주로 멤버 변수와 메서드에 사용

 

1-1. static 변수

  • 특정 클래스에서 공용으로 사용할 수 있는 변수
  • static 변수 / 정적 변수 / 클래스 변수 라고 함

 

1-1-1. static 변수 예시 (몇 개의 객체가 생성되었는지 count하고 싶음)

  • 잘못된 예시 (static 사용 x)
public class Person {
	public String name;
	public int count;
	
	public Person(String name) {
		this.name = name;
		count ++;
	}
}

public class Main {
	public static void main(String[] args) {
		// 객체 생성 - 1
		Person person1 = new Person("A");
		System.out.println("A count = " + person1.count);
		
		// 객체 생성 - 2
		Person person2 = new Person("B");
		System.out.println("B count = " + person2.count);
	}
}

/* 출력결과
A count = 1
B count = 1  */
  • 출력결과
    • 원하는 대로 몇 개의 객체가 생성되었는지 확인 불가
    • 객체 생성마다 Person 인스턴스가 새로 만들어지고 이 인스턴스에 포함된 count 변수가 새로 만들어지기 때문
  • 옳은 예시 (static 사용)
public class Person {
	public String name;
	public static int count;   // 공용으로 함께 사용하는 static 변수
	
	public Person(String name) {
		this.name = name;
		count ++;
	}
}

public class Main {
	public static void main(String[] args) {
		// 객체 생성 - 1
		Person person1 = new Person("A");
		System.out.println("A count = " + Person.count);
		
		// 객체 생성 - 2
		Person person2 = new Person("B");
		System.out.println("B count = " + Person.count);
	}
}

/* 출력결과
A count = 1
B count = 2  */
  • 출력결과
    • 객체가 생성되면 생성자에서 static 변수 count를 증가시킴
    • 따라서 원하는대로 생성한 객체 수를 확인 가능
📌 정적 변수는 인스턴스 영역이 아니라 메서드 영역에서 관리!
      ⇒ static 변수인 count는 인스턴스 영역에서 생성되지 않음 / 대신 메서드 영역에서 관리

 

1-1-2. static 변수 접근 방법

  • 위의 예제와 같이 클래스명.정적변수이름 으로 접근
  • 마치 클래스에 직접 접근하는 느낌
📌 static 변수는 인스턴스가 아닌 클래스 자체에서 참조해서 사용

 

1-2. static 메서드

  • 정적 메서드는 객체 생성없이 클래스에 있는 메서드를 바로 호출할 수 있음
  • static 메서드는 static이 붙은 “static 변수나 static 메서드만 사용가능!”
public Class Person {
	// 인스턴스 변수
	private String name;
	// static 변수
	private static int count;
	
	// 인스턴스 메서드
	public void instanceMethod() {
		System.out.println("인스턴스 메서드");
	}
	
	// static 메서드
	public static void staticMethod() {
		System.out.println("정적 메서드");
	}
	
	public static void Info() {
		System.out.println("이름 : " + name);    // 인스턴스 변수 접근, 컴파일 에러!
		System.out.println("카운트 : " + count);  // static 변수 접근 가능!
		
		instanceMethod();       // 인스턴스 메서드 접근, 컴파일 에러!
		staticMethod();         // static 메서드 접근 가능!
	}
}
  • 정적 메서드는 공용 기능임
    • ⇒ 접근 제어자만 허락한다면 클래스를 통해 모든곳에서 static 호출 가능!
📌 static 메서드가 인스턴스의 기능 사용 불가한 이유

     static 메서드는 클래스 이름을 통해 바로 호출함
     ⇒ 인스턴스처럼 참조값의 개념 x
     ⇒ 인스턴스 변수, 메서드 를 사용하려면 참조값을 알아야 되는데 static 메서드는 참조값 없이 호출되기 때문에!!

 

1-2-1. static 메서드 접근 방법

  • static 변수와 마찬가지로 클래스 통해서 접근 가능
    클래스명.정적메서드
  • 인스턴스 통해서 접근도 가능 (추천x)
    인스턴스명.정적메서드
// 클래스 통한 접근
Person.staticMethod();

// 인스턴스 통한 접근 (추천 x)
Person person1 = new Person();
person1.staticMethod();
저작자표시 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[Java] 자바 메모리 구조  (0) 2024.07.09
[Java] final  (0) 2024.07.09
[Java] 객체 지향 프로그래밍 - 추상화 (Abstraction)  (0) 2024.07.09
[Java] 객체 지향 프로그래밍 - 다형성 (Polymorphism)  (0) 2024.07.09
[Java] 객체 지향 프로그래밍 - 상속 (Inheritance)  (0) 2024.07.08
  1. 1. static
  2. 1-1. static 변수
  3. 1-2. static 메서드
'Java' 카테고리의 다른 글
  • [Java] 자바 메모리 구조
  • [Java] final
  • [Java] 객체 지향 프로그래밍 - 추상화 (Abstraction)
  • [Java] 객체 지향 프로그래밍 - 다형성 (Polymorphism)
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
공대생의 코딩 일기전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (152)
    • Spring Boot (55)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (12)
      • CI,CD (8)
      • Monitoring (1)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
[Java] static
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.