지구정복

[JAVA] 11/10 | 메소드의 매개변수 배열로 받기, 전역변수와 지역변수, 정적멤버 본문

데이터 엔지니어링 정복/JAVA & JSP

[JAVA] 11/10 | 메소드의 매개변수 배열로 받기, 전역변수와 지역변수, 정적멤버

eeaarrtthh 2020. 11. 10. 17:12
728x90
반응형

ㅇ메소드의 매개변수 배열로 받기

... 연산자를 사용하면 된다.

아래 dogugu3 메소드는 매개변수를 배열로 받아서 해당 곱셈단의 곱셈을 출력해준다.

class Util {
    void dogugu1(int a) {
        for(int i=0; i<=9; i++) {
            if (i==0) {
                System.out.println("*****"+a+"단*****");
            } else {
            System.out.print(a+"X"+i+"="+a*i+"\t");
            }
        }
    }

    String dogugu2(int a) {
        String result ="";
        for(int i=0; i<=9; i++) {
            if (i==0) {
                result += "*****"+a+"단*****"+"\n";
            } else {
                result += a+"X"+i+"="+a*i+"\t";
            }
        }
        return result;
    }

    String dogugu3(int ... datas) {        //매개변수를 배열로 받아서 datas에 저장한다.
        String result ="";
        for (int data : datas) {
            result += "****"+data+"단****\n";
            for (int j=1; j<=9; j++) {
                result += data+"x"+j+"="+(data*j)+"\t";
            }
            result += "\n";
        }
        return result;
    }
}

public class Ex111002 {
    public static void main(String[] args) {
        Util z = new Util();
        System.out.println(z.dogugu3(1, 3));
        System.out.println(z.dogugu3(2, 4, 8));      //2, 4, 8이 배열로 들어간다.
    }
}    

 

ㅇ전역 변수와 지역 변수 사용

class Variable {
    //전역
    //멤버변수 - 자동 초기화
    //제어문 사용불가
    int data1;

    void doFunc() {
        //지역변수 - 지역변수는 초기화해야지 사용가능
        //제어문 사용가능
        int data2=1;

        //전역변수를 메소드 안에서 재할당해도 사용가능하다.
        int data1 = 10;

        System.out.println("data1: "+data1);
        System.out.println("data2: "+data2);
    }
}


public class Ex111004 {
    public static void main(String[] args) {
        Variable v = new Variable();

        v.doFunc();
    }
}
    

 

만약 메소드 안에서 전역변수명과 지역변수명이 같을 경우 전역변수를 사용하고 싶으면 this. 연산자를 이용한다.

this. 는 this 가 있는 클래스 자기 자신을 의미하고 도트(.)는 클래스를 참조하는 연산자이다.

class Variable {
    //전역
    //멤버변수 - 자동 초기화
    //제어문 사용불가
    int data1;

    void doFunc() {
        //지역변수 - 지역변수는 초기화해야지 사용가능
        //제어문 사용가능
        int data2=1;

        //전역변수를 메소드 안에서 재할당해도 사용가능하다.
        int data1 = 10;

        //만약 전역변수와 지역변수가 이름이 같은데 전역변수를 사용하고 싶으면
        // this. 를 사용하면 된다.
        System.out.println("data1: "+data1);            //10
        System.out.println("this.data1: "+this.data1);  //0
        System.out.println("data2: "+data2);            //1
    }
}


public class Ex111004 {
    public static void main(String[] args) {
        Variable v = new Variable();

        v.doFunc();

        System.out.println("v : "+v);
    }
}
    

 

 

 

메소드도 마찬가지이다.

this.자기자신의 메소드 로 호출할 수 있다.

class Variable {
    //전역변수 = 필드
    int data = 10;

    void doFunc1() {
        //자가 자신 클래스의 필드와 메소드를 호출할 때는 다음과 같다.
        System.out.println("doFunc1() ");
        System.out.println("data : "+this.data);
        this.doFunc2();
    }

    void doFunc2() {
        System.out.println("doFunc2() ");
    }
}


public class Ex111005 {
    public static void main(String[] args) {
        Variable v = new Variable();

        v.doFunc1();
    }
}
    

 

 

ㅇ정적 멤버

멤버변수(=필드)에는 인스턴스 필드와 스태틱 필드(=클래스 필드) 두 가지가 있다.

스태틱 필드는 한 번 선언하면 바뀌지 않느 값이다.

예를 들면 원의 넓이를 구할 때 원주율(파이) 같은 값을 의미한다.

인스턴스 필드는 객체마다 값이 변경될 여부가 있는 필드를 의미한다.

 

정적 필드는 객체를 만들지 않아도 클래스명.정적멤버명을 바로 이용할 수 있다.

그 이유는 클래스가 로딩되면 정적멤버는 메소드 영역에 적재되므로 객체를 만들지 않아도 바로 사용할 수 있다.

class Variable {
    ////멤버변수에는 인스턴스 필드와 스태틱필드가 있다.
    //instance 필드
    int data1 = 10;

    //static 필드 = class 필드
    static int data2 = 10;

    void doFunc1() {
        System.out.println("dofunc1 호출" );
    }

    static void doFunc2() {
        System.out.println("dofunc2 호출" );
    }


}


public class Ex111006 {
    public static void main(String[] args) {
        Variable v = new Variable();

        System.out.println( v.data1);
        System.out.println( v.data2);

        v.doFunc1();
        v.doFunc2();

        System.out.println("----정적 멤버 바로 사용하기----" );
        //객체변수 사용하지않고 바로 참조가능
        System.out.println( Variable.data2);    
        Variable.doFunc2();


    }
}
    

 

 

 

이번에는 인스턴스 멤버 안에서 정적 멤버를 호출할 수 있는지 알아보자.

사용가능하지만

정적 멤버안에서 this. 연산자와 인스턴스 멤버는 사용할 수 없다. 

this. 를 사용하지 않는 경우 바로 클래스명을 사용한다.

728x90
반응형
Comments