ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 16 - 생활코딩 자바강의 정리(클래스 맴버, 인스턴스 맴버)
    TIL 2023. 1. 30. 23:46

    [목차]

    1. 맴버란?
    2. 클래스 변수
    3. 클래스 메소드
    4. 타입별 비교

    맴버란

    • 구성원이라는 뜻을 가지고 있습니다
    • 메소드 밖에 선언된 변수

    클래스 변수

    class Calculator {
    // static을 맴버(변수, 메소드) 앞에 붙이면 클래스의 맴버가 됩니다
        static double PI = 3.14;
        int left, right;
     
        public void setOprands(int left, int right) {
            this.left = left;
            this.right = right;
        }
     
        public void sum() {
            System.out.println(this.left + this.right);
        }
     
        public void avg() {
            System.out.println((this.left + this.right) / 2);
        }
    }
     
    public class CalculatorDemo1 {
     
        public static void main(String[] args) {
     
            Calculator c1 = new Calculator();
    // 인스턴스를 통해서 PI에 접근
            System.out.println(c1.PI);
     
            Calculator c2 = new Calculator();
            System.out.println(c2.PI);
     // 클래스를 통해서 PI에 접근
            System.out.println(Calculator.PI);
     
        }
     
    }
    • 클래스 변수는 변수의 변경사항을 모든 인스턴스에서 공유해야할 때 사용방법
    • 모든 계산에 값을 포함시켜야할 떄
    class Calculator2 {
        static double PI = 3.14;
        // 클래스 변수인 base가 추가되었다.
        static int base = 0;
        int left, right;
     
        public void setOprands(int left, int right) {
            this.left = left;
            this.right = right;
        }
     
        public void sum() {
            // 더하기에 base의 값을 포함시킨다.
            System.out.println(this.left + this.right + base);
        }
     
        public void avg() {
            // 평균치에 base의 값을 포함시킨다.
            System.out.println((this.left + this.right + base) / 2);
        }
    }
     
    public class CalculatorDemo2 {
     
        public static void main(String[] args) {
     
            Calculator2 c1 = new Calculator2();
            c1.setOprands(10, 20);
            // 30 출력
            c1.sum();
     
            Calculator2 c2 = new Calculator2();
            c2.setOprands(20, 40);
            // 60 출력
            c2.sum();
     
            // 클래스 변수 base의 값을 10으로 지정했다.
            Calculator2.base = 10;
     
            // 40 출력
            c1.sum();
     
            // 70 출력
            c2.sum();
     
        }
     
    }

    클래스 메소드

    • 인스턴스를 사용하지 않고 클래스에 직접 접근해서 sum과 avg 접근
    class Calculator3{
      
        public static void sum(int left, int right){
            System.out.println(left+right);
        }
         
        public static void avg(int left, int right){
            System.out.println((left+right)/2);
        }
    }
     
    public class CalculatorDemo3 {
         
        public static void main(String[] args) {
            Calculator3.sum(10, 20);
            Calculator3.avg(10, 20);
             
            Calculator3.sum(20, 40);
            Calculator3.avg(20, 40);
        }
     
    }

    맴버타입의 비교

    • 인스턴스 메소드는 클래스 맴버에 접근 할 수 있습니다.
    • 클래스 메소드는 인스턴스 맴버에 접근할 수 없습니다.
    • 인스턴스 변수 -> Non-Static Field
    • 클래스 변수 -> Static Field
    class C1{
        static int static_variable = 1;
        int instance_variable = 2;
        static void static_static(){
            System.out.println(static_variable);
        }
        static void static_instance(){
            // 클래스 메소드에서는 인스턴스 변수에 접근 할 수 없다. 
            //System.out.println(instance_variable);
        }
        void instance_static(){
            // 인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다.
            System.out.println(static_variable);
        }
        void instance_instance(){        
            System.out.println(instance_variable);
        }
    }
    public class ClassMemberDemo {  
        public static void main(String[] args) {
            C1 c = new C1();
            // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공
            // 인스턴스 메소드가 정적 변수에 접근 -> 성공
            c.static_static();
            // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공
            // 정적 메소드가 인스턴스 변수에 접근 -> 실패
            c.static_instance();
            // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공
            // 인스턴스 메소드가 클래스 변수에 접근 -> 성공
            c.instance_static();
            // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공 
            // 인스턴스 메소드가 인스턴스 변수에 접근 -> 성공
            c.instance_instance();
            // 클래스를 이용해서 클래스 메소드에 접근 -> 성공
            // 클래스 메소드가 클래스 변수에 접근 -> 성공
            C1.static_static();
            // 클래스를 이용해서 클래스 메소드에 접근 -> 성공
            // 클래스 메소드가 인스턴스 변수에 접근 -> 실패
            C1.static_instance();
            // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
            //C1.instance_static();
            // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
            //C1.instance_instance();
        }
     
    }
Designed by Tistory.