2017년 6월 5일 월요일

클래스 멤버와 인스턴스 멤버간의 참조와 호출

참조와 호출 링크

61 lines (53 sloc)  2.22 KB
package common.fundament.fundament;
/*
* ◎ 클래스 멤버와 인스턴스 멤버간의 참조와 호출
*
* - 같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출이 가능하다.
단, 클래스 멤버가
* 인스턴스 멤버를 참조 또는 호출하고자 하는 경우에는 인스턴스를 생성해야 한다.
* 그 이유는 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만,
클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지
* 않을수도 있기 때문이다.
*
*
* - 인스턴스 멤버(인스턴스변수와 인스턴스메서드)는 반드시 객체를 생성한 후에만 참조 또는 호출이 가능하기 때문에
* 클래스 멤버가 인스턴스멤버를 참조, 호출하기 위해서는 객체를 생성하여야 한다.
* 하지만, 인스턴스멤버간의 호출에는 아무런 문제가 없다. 하나의 인스턴스멤버가 존재한다는 것은 인스턴스가 이미 생성되어
* 있다는 것을 의미하며, 다른 인스턴스 멤버들도 모두 존재하기 때문이다.
*
* */
public class MemberCall {
int iv = 10; //인스턴스 변수
static int cv = 20; // 클래스 변수
int iv2 = cv;
// static int cv2 = iv; //에러, 클래스 변수는 인스턴스 변수를 사용할 수 없음
static int cv2 = new MemberCall().iv; // 인스턴스를 생성해야 사용 가능하다.
static void staticMethod(){
System.out.println(cv);
// System.out.println(iv); //에러 .. 클래스메소드에서는 인스턴스변수를 사용 불가
MemberCall mc = new MemberCall();
System.out.println(mc.iv); // 객체를 생성한 후에 인스턴스변수의 참조가 가능
}
void instanceMethod(){
System.out.println(iv); //인스턴스 메소드에서는 바로 인스턴스 메소드 사용 가능.
System.out.println(cv);
}
static void staticMethod2(){
staticMethod();
// instanceMethod(); //에러, 클래스 메소드에서는 인스턴스 메소드를 호출 할 수 없음
MemberCall mc = new MemberCall();
mc.instanceMethod(); // 인스턴스를 생성한 후에야 호출할 수 있음.
}
void instanceMethod2(){ // 인스턴스 메소드에서는 인스턴스 메서드와 클래스 메소드
staticMethod(); // 모두 인스턴스 생성없이 바로 호출이 가능하다.
instanceMethod();
}
/*
*
* MemeberCall c = new MemberCall();
* int result = c.instanceMethod1();
* =>
* int result = new MemberCall().instanceMethod1();
* 이렇게 사용하면 참조변수를 선언하지 않았기 때문에 생성된 MemberCall 인스턴스는 더이상 사용할 수 없다.
*
*
* */
}

참조와 호출 특성

47 lines (38 sloc)  1.6 KB
package common.fundament.fundament;
/*
* ■ 클래스 변수(static변수) 는 인스턴스를 생성하지 않아도 사용할 수 있다.
*
* ■ 클래스 매소드(static method) 에는 인스턴스 변수를 사용할 수 없다.
* 인스턴스변수는 인스턴스가 반드시 존재해야만 사용할 수 있는데,
클래스매소드(static이 붙은 메소드)는 인스턴스 생성없이 호출 가능하므로
* 클래스 매소드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있다.
그래서 클래스 메서드에서 인스턴스 변수의 사용을 금지한다.
*
* ■ 클래스 영역에 선언된 변수를 멤버변수라 한다. 멤버변수 중에 static이 붙은것은 클래스변수 (static 변수),
static이 붙지 않은 것은 인스턴스
변수라 한다.
*
* */
class MyMath{
long a, b;
// 인스턴스 변수 a, b만을 이용해서 작업하므로 매개변수가 필요없다.
long add(){ return a+b; } // a, b는 인스턴스 변수
long sub(){ return a-b; }
long multiply(){ return a*b; }
double div(){ return a/b; }
//인스턴스변수와 관계없이 매개변수만으로 작업이 가능하다.
static long add(long a, long b){ return a+b;}
static long sub(long a, long b){ return a-b; }
static long multiply(long a, long b){ return a*b; }
static double div(long a, long b){ return a/b; }
}
public class MyMathTest {
public static void main(String[] args){
//클래스 매소드 호출, 인스턴스 생성없이 호출 가능
System.out.println(MyMath.add(100L , 200L));
System.out.println(MyMath.sub(100L, 200L));
System.out.println("===========================================");
MyMath mm = new MyMath(); //인스턴스 생성
mm.a = 100L;
mm.b = 200L;
System.out.println(mm.add());
System.out.println(mm.sub());
}
}

댓글 없음:

댓글 쓰기

JavaScript_함수의 역할

◎ 자바스크립트 함수의 역할 ■ 자바스크립트 함수와 메서드는 전혀 다른 개념이다. - 자바스크립트 함수는 메서드 역할을 할 수 있지만, 객체지향 프로그래밍의 메서드는 자바스크립트의 함수 역할을 할 수 없다. - 메서드와는 다르게 ...