본문 바로가기
Java/Java language

[JAVA]7. 가변인자 / static&인스턴스 메소드 / super & super() / final 예약어

by oomm112 2021. 8. 13.

A. 가변인자 (variable argument)

 - 가변인자가 없던 시절에는 vector나 배열을 사용하여 전달하였다.

 - 가변인자는 자바의 특징인 매개변수의 다형성을 좀더 편리하게 사용할수 있도록 만들어졌다. (JDK 1.5부터)

1) 가변인자 사용법

void sum(String ... str){
	for(String a:str){
    	sytem.out.println(a);
    }
}
//위처럼 매개변수에 ...을 이용하여 여러 매개변수를 받을수 있다. 
//가변인자를 사용할 경우 자체적으로 배열을 생성해서 매개변수들을 받아올수 있다.

*가능하면 가변인자를 사용한 메소드는 오버로딩을 하지 않는것이 좋다!!

 - 가변인자를 사용할 경우 어떤 메소드를 사용해야하는지 구분하기가 어렵기 때문이다.

 - 대표적으로 우리가 익히 사용하고 있는 가변인자를 사용하는 메소드는 printf()가 있다!

 

B. static 과 인스턴스 메소드

 1) static 메소드

 - 객체를 생성하지 않아도 클래스 이름으로 바로 호출 가능한 메소드이다.

static void printInfo(String name){}

 2) 인스턴스 메소드

- 반드시 객체를 생성한 후에 메소드를 호출 할 수 있다.

void printInfo(String name){}

* 두 메소드의 차이점은 static이 앞에 붙었느냐 안붙었느냐의 차이이다.

* 그리고 static메소드 안에서는 인스턴스 변수와 메소드 또한 사용이 불가능하다 . 

why? static이 인스턴스 보다 초기화 시점이 빠르기 때문이다.

* 만약, 꼭 사용을 해야한다면 객체를 생성한 후에 참조가 가능하다.

 

C. super와 super()

 1) super는 부모객체를 가리키는 레퍼런스 변수이다.

class Parent{
	Stirng a = "부모 클래스";
}

class Child extends Parent{
	void show(){
    	system.out.println(a); //오버라이딩을 하지 않을경우 부모 클래스의 a를 사용한다.
        system.out.println(super.a); // 만약 오버라이딩을 했을 경우에도 부모클래스의 a를 사용한다.
    }
}

 2) super()는 부모 클래스의 생성자를 호출하는 역할을 한다.

class Parent{
	Parent(){
    	String a = "안녕";
    }
}

class Childe extends Parent(){
	super();
    system.out.println(a); //이 경우 super()메소드를 이용하여 부모클래스의 생성자를 호출하였기
    //때문에 "안녕" 이 호출될 것이다.
}

 

D. final 예약어 

 - 마지막, 변수/메소드/클래스 앞에 올 수 있다. 

 1) 변수 앞 final - 프로그램 실행 중 변수값 변경 불가능

final int a = 1;
a = 2; // 이 코드는 오류가 난다, final 변수의 경우 값을 임의로 값을 변경할수 없다!

 2) 메소드 앞 final - 해당 메소드 오버라이딩 불가능

class Parent{
	final void runMethod{}
}

class Child extends Parent{
	void runMethod{}//이 메소드는 final메소드이기 떄문에 오버라이딩을 하지 못한다!
}

 3) 클래스 앞 final - 해당 클래스 상속 불가능

final class Parent{
}

class Child extends Parent{	//final 클래스이기 때문에 parent클래스를 상속받을수 없다
}

 

반응형

'Java > Java language' 카테고리의 다른 글

[JAVA]9. 컬렉션 구조 -1 (List ) + Stack  (0) 2021.08.14
[JAVA]8. 컬렉션 구조  (0) 2021.08.14
[JAVA]6. 배열?  (0) 2021.08.13
[JAVA]5. 삼항 연산자 / break와 continue의 차이  (0) 2021.08.13
[JAVA]4. 자바 JDK와 식별자  (0) 2021.08.13

댓글