day10_MemberCall

육희영·2021년 10월 26일
0

static 전체 개념 정리

package com.java1.day10;

//static를 사용하면 메모리에 바로 등록 된다.
//static는 공유의 개념이다.
//클래스 내에 선언된 변수들 중에 static 이 붙은 변수를 클래스 변수라 하고
//static 이 붙지 않은 변수를 인스턴스 변수라 한다.
//아래 예제는 실전에서는 잘 일어나지 않는경우이다. 
//실제로는 같은 클래스 내에서 클래스멤버가 인스턴스멤버를 참조 또는 호출해야하는 경우는 드물다. 
//만일 그런 경우가 발생한다면, 인스턴스메서드로 작성해야할 메서드를 클래스메서드로 한 것은 아닌지 한번 더 생각해봐야 한다. 

public class MemberCall {

	int iv = 10; 
    static int cv = 20; // static 를 선언하면 인스턴스 생성없이 바로 접근 가능하다.

    int iv2 = cv; 	//static 변수는 일반변수에 넣을수 있다.
//  static int cv2 = iv;                   에러. 클래스변수는 인스턴스 변수를 사용할 수 없음. 
    static int cv2 = new MemberCall().iv;   // 굳이 사용하려면 이처럼 객체를 생성해야함. 

    static void classMethod1() { 
          System.out.println(cv); 	// static 매서드 안에서는 static 변수만 가능.
//       System.out.println(iv);       에러. 클래스메서드에서 인스턴스변수를 바로 사용할 수 없음. 
          MemberCall c = new MemberCall();     // static 매서드에서 일반 변수를 쓸려면 인스턴스를 생성한뒤 사용  
          System.out.println(c.iv);   // 객체를 생성한 후에야 인스턴스변수의 참조가 가능함. 
   } 

    void instanceMethod1() { 
          System.out.println(cv);   // 일반 매서드 에서는 static변수와 일반변수 둘다 사용가능.         
          System.out.println(iv);  // 인스턴스메서드에서는 인스턴스변수를 바로 사용가능. 
   } 

    static void classMethod2() { 
          classMethod1(); 
//       instanceMethod1(); 에러. 클래스메서드에서는 인스턴스메서드를 바로 호출할 수 없음. 
          MemberCall c = new MemberCall(); 
          c.instanceMethod1(); // 인스턴스를 생성한 후에야 인스턴스메서드를 호출할 수 있음.
    } 
    
    void instanceMethod2() { // 인스턴스메서드에서는 인스턴스메서드와 클래스메서드 
          classMethod1();         // 모두 인스턴스생성없이 바로 호출이 가능하다. 
          instanceMethod1(); 
   } 
}

0개의 댓글

관련 채용 정보