웹개발 교육/Java

[33일] Java (24) - static

2022. 9. 13. 12:41

static은 정적 혹은 고정된이라는 의미이다.

정적 멤버는 클래스에 고정된 멤버로서 new 연산자를 이용해 별도의 객체 생성 없이 사용 가능한 필드와 메소드이다.

static은 메모리가 1번 생성되고 소멸도 1번 된다.

 

static은 클래스명으로 직접 접근이 가능하다.

클래스명.변수

클래스명.함수()

 

 

빨간색으로 표시된 s는 static, 파란색으로 표시된 f는 final이라는 의미이다.

 

static에 대해 알아보기 위해 Sawon 클래스를 생성하여 실습해보자

package oop0913;

public class Sawon {
	//멤버변수 field
	String sabun;  //사원번호
	String name;   //이름
	int pay;       //급여
	
	//생성자함수 constructor
	public Sawon() {}

	//생성자 함수 자동 코딩
    //메뉴 Source ->Generate Constructor using Fields...
	public Sawon(String sabun, String name, int pay) {
		this.sabun = sabun;
		this.name = name;
		this.pay = pay;
	}//end
	
	//static 변수
	static String COMPANY = "(주)아이티윌";
	static int SUDANG = 10;
	static double TAX = 0.03;
	
	//static 함수
	static void line() {
		System.out.println("--------------------");
	}//line() end
}//class end

 

이제 Test02_static 클래스 만들어 Sawon클래스를 사용해보자

package oop0913;

public class Test02_static {

	public static void main(String[] args) {
		
		//Sawon 클래스를 생성하고 실습
		
		//static변수와 static함수는 클래스명으로 직접 접근한다
		System.out.println(Sawon.COMPANY);
		System.out.println(Sawon.SUDANG);
		System.out.println(Sawon.TAX);
		Sawon.line();
			
		
	}//main() end

}//class end

 

물론 new연산자를 통해 객체를 만들어 Sawon 클래스의 static 필드와 static 메소드에 접근할 수 있다.

하지만 이 경우 static을 사용한 의미가 없다.

//1)static의 특징을 적용하지 않은 경우(비추천)
Sawon one = new Sawon("1001", "개나리", 100);
//나의 세금
double myTax = one.pay * one.TAX;  //3

//나의 총 지급액 = 금여 - 세금 + 수당
int total = (int)(one.pay-myTax+one.SUDANG);  //100-3+10

System.out.println("회사 : " + one.COMPANY);
System.out.println("사번 : " + one.sabun);
System.out.println("이름 : " + one.name);
System.out.println("급여 : " + one.pay);
System.out.println("수당 : " + one.SUDANG);
System.out.println("세금 : " + myTax);
System.out.println("총지급액 : " + total);
one.line();

 

//2)static의 특징을 적용한 경우(추천)
//-> static 변수와 static 함수는 이미 static 메모리에 값이 올라와 있기 때문에
//-> 별도의 객체 생성을 하지 않고도 바로 접근할 수 있다.
Sawon two = new Sawon("1002", "진달래", 200);

myTax = two.pay * Sawon.TAX;  //3

//나의 총 지급액 = 금여 - 세금 + 수당
total = (int)(two.pay-myTax+Sawon.SUDANG);  //100-3+10

System.out.println("회사 : " + Sawon.COMPANY);
System.out.println("사번 : " + two.sabun);
System.out.println("이름 : " + two.name);
System.out.println("급여 : " + two.pay);
System.out.println("수당 : " + Sawon.SUDANG);
System.out.println("세금 : " + myTax);
System.out.println("총지급액 : " + total);
Sawon.line();
System.out.println("회사 : " + Sawon.COMPANY);
System.out.println("수당 : " + Sawon.SUDANG);
Sawon.line();

이와 같이 static으로 선언한 static 변수와 static 함수는 별도의 객체 생성 없이 바로 접근할 수 있다.

 

여기서 사번, 이름, 급여 등은 사람별(객체)로 그 값이 다르다. 하지만 회사와 수당은 객체 별로 다르지 않다. 이렇게 객체별로 같은 값을 갖는 공용 데이터일 경우 static으로 선언하는 것이 좋다.

 

//3)static변수의 연산
//-> static 메로리의 특징은 생성도 1번, 소멸도 1번
//-> 주소를 공유한다.
Sawon kim = new Sawon("1003", "무궁화", 300);
Sawon lee = new Sawon("1004", "봉선화", 400);

System.out.println(kim.SUDANG);  //10
System.out.println(lee.SUDANG);  //10

kim.SUDANG = kim.SUDANG+1;       //10+1
System.out.println(kim.SUDANG);

lee.SUDANG = lee.SUDANG+1;       //11+1
System.out.println(lee.SUDANG);

여기서 lee.SUDANG은 11이 될 것 같지만 12가 된다.

그 이유는 static은 주소를 공유하며 처음에 언급한 'static은 메모리가 1번 생성되고 소멸도 1번 된다'라는 특징 때문이다.

SUDANG은 kim.SUDANG에서 1이 더해저 11이 된 상태이기 때문에

lee.SUDANG+1은 결국 11+1이 되어 12가 된다.

'웹개발 교육 > Java' 카테고리의 다른 글

[33일] Java (26) - 성적 프로그램 ox 표시하기  (0) 2022.09.13
[33일] Java (25) - final  (0) 2022.09.13
[33일] Java (23) - this  (0) 2022.09.13
[32일] Java (22) - String 연습 문제  (0) 2022.09.08
[32일] Java (21) - String 클래스  (0) 2022.09.08
'웹개발 교육/Java' 카테고리의 다른 글
  • [33일] Java (26) - 성적 프로그램 ox 표시하기
  • [33일] Java (25) - final
  • [33일] Java (23) - this
  • [32일] Java (22) - String 연습 문제
ewok
ewok
ewok
기록장
ewok
전체
오늘
어제
  • 분류 전체보기
    • 웹개발 교육
      • HTML
      • CSS
      • JavaScript
      • Database
      • Java
      • jQuery
      • Ajax
      • Bootstrap
      • jsp
      • Spring
      • MyBatis
      • 프로젝트
    • JAVA
    • SpringBoot
      • 기초
      • AWS
      • 개인프로젝트
    • Spring Security
    • JPA
    • 테스트코드
    • Error
    • CS
      • 컴퓨터 구조
      • 이산수학
    • 알고리즘
      • 정리
      • Java
    • SQL
    • 자격증
      • SQLD
      • 정보처리기사
    • Git

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • git bash
  • 노랭이
  • 생성자
  • branch
  • 버전 관리
  • sqld 자격증
  • base
  • org.springframework.beans.factory.UnsatisfiedDependencyException
  • this
  • GIT
  • sqld 합격
  • 브랜치
  • SQLD
  • org.hibernate.tool.schema.spi.CommandAcceptanceException
  • merge commit

최근 댓글

최근 글

hELLO · Designed By 정상우.
ewok
[33일] Java (24) - static
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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