국비 17일차 static

2021. 1. 27. 18:48

2021.01.27 국비교육 17일차

[TOC]

Static

  • 소스코드 작성
  • 클래스파일 생성
  • 클래스파일 실행
  • 클래스 로딩
    • static 키워드를 사용한 변수와 메소드가 메모리에 자동으로 로딩도니다.
    • 대표적으로 main메소드가 있다.
  • main 메소드 실행
    • 여러 static 메소드들 중에서 시작점 기능을 하는 main메소드 실행
  • 인스턴스 생성
    • 인스턴스 변수와 메소드를 메모리에 로딩
  • 메소드 호출
    • 메소드 안에서 선언된 로컬변수 생성
  • 결과값 출력

=================================================

  • static 특징

    • 클래스, 변수, 메소드 지정자로 사용 가능
    • 단 한번 생성
    • 객체 생성과 무관
    • 프로그램 종료시 함께 종료
  • static 용도

    • 클래스 용도 : inner클래서에서만 사용 가능
    • 메소드 용도 : 객체 생성없이 메소드 사용
      • 주의할 점은 static 메소드 내에서 인스턴스 변수 사용하지 못함
    • 변수 용도 : 데이터 누적용
      • 프로그램 내애서 특정 데이터값을 계속 유지할 목적이라면 static변수가 적합
변수명 정의 생성 ~ 소멸 저장 위치 특징
로컬변수 매서드내에서 정의 메소드 호출시 생성하고 메소드 끝나면 제거
(메소드 호출시마다 생성됨)
stack 메모리 사용전에 반드시 초기화 해야함
인스턴스변수 매서드밖에서 정의 객체 생성시 생성되고 객체 소멸시 제거
(new할때마다 생성됨)
heap 메모리 초기화하지 않으면 자동으로 기본값 설정
static변수
(class변수)
매서드 밖에서 정의.
단, static키워드 사용
프로그램 실행시 생성되고 프로그램 종료시 제거
(단 한번만 생성)
method area영역 초기화하지 않으면 자동으로 기본값 설정
package com.test;

class Counter{
    static int count; // static 변수 : 객체 생성전, 클래스 로드시 생성, 자동초기화, 클래스 이름으로 접근가능, 객체의 공유변수, 클래스 내 사용가능
    int num; // 일반 멤버 변수 : 객체 생성 후 사용 가능, 객체마다 새로 생성, 클래스 내 사용 가능
    public Counter() { // counter가 호출되면 자동으로 count up
        count ++; //static 변수 1씩 증가
        num = count;
    }

    public int getNum() {return num;}

    public void setCount(int count) {
        Counter.count = count;
    }

}

public class Ex05_18 {
    public static void main(String[] args) {

        //Counter Counter = new Counter();

        System.out.println("객체 생성 횟수 : " + Counter.count);

        Counter c = new Counter();        
        System.out.println("객체 생성 횟수 : " + c.getNum() );

        Counter c2 = new Counter();
        System.out.println("객체 생성 횟수 : " + c2.getNum());;

        System.out.println("객체 생성 횟수 : " + Counter.count);

        Counter c3 = new Counter();
        System.out.println("객체 생성 횟수 : " + Counter.count);

    }

}
package com.test;

class Counter2{

    static int count;
    int num;
    public Counter2(){
        count++;
        num = count;
    }

    public int getNum() {return num;}
    public static int getCount() {return count;} 

}


public class Ex05_19 {

    public static void main(String[] args) {

        System.out.println("객체 생성 횟수 : " + Counter2.getCount());

        Counter2 c = new Counter2();
        System.out.println("객체 생성 횟수 : " + c.getNum());

        Counter2 c2 = new Counter2();
        System.out.println("객체 생성 횟수 : " + Counter2.getCount());


    }

}

+ Recent posts