2017. 7. 2. 22:42
java 자바 메소드 가변인자 알아보기 C. Java2017. 7. 2. 22:42
오버로딩
- 같은 클래스 안에서 메소드 명이 같고,인수 형식이 다른 메소드를 정의 하는 것을 의미
오버라이딩
- 같은 클래스 안에서 메소드 명이 같고,인수 형식이 다른 메소드를 정의 하는 것을 의미
오버라이딩
- 서브 클레스에서 메소드 명. 인수의 형식이 완전히 같은 메소드를 다시 정의 하는 것을 의미
메소드(Method)
- 특정기능을 처리하기 위한 명령들을 묶어 놓은 작은 프로그램 단위 (=함수)
- 특정기능을 처리하기 위한 명령들을 묶어 놓은 작은 프로그램 단위 (=함수)
- 자주 혹은 반복적으로 사용되는 코드를 기능을 모듈로 구현 (모듈-특정 기능을 하는 코드 덩어리)
메서드 만드는 형식
자료형 메서드이름 (전달인자리스트)
{
변수 선언;
문장;
return (결과 값);
}
자료형 메서드이름 (전달인자리스트)
{
변수 선언;
문장;
return (결과 값);
}
-> { ... } 블럭으로 묶여 있어야 함. }를 만나면 함수가 종료되어 스택에서 제거된다 .
-> 호출할 이름이(메서드이름) 있어야 함.
-> 전달할 인자 정의해야 함.
-> 함수의 자료형(리턴타입)을 정의해야 함 .
-> 메서드를 호출한 호출자에게 다시 돌아와야 함. (메서드 종료를 의미)
-> 반환할 인자가 없는 경우 ( return ;) 생략가능
-> 반환할 인자가 있는 경우 돌아갈 때 반환값을 가지고 가야함.( return 반환값;)
메서드의 호출 방법 : 참조변수.메서드이름(); 메서드에 선언된 매개변수가 없는경우
참조변수.메서드이름(값1,값2..); 메서드에 선언된 매개변수가 있는경우
static 메소드와 non-static 메소드의 차이점 1
- non-static 메소드( instance 메소드 )
: non-static 변수는 class로 부터 반드시 객체를 만들어야만 호출할 수 있다.
ex) ----------------------------------------------------
class non_static메소드
{
int Plus(int a, int b) {
int c = a + b;
return c;
}
}
-----------------------------------------------------
import java.lang.*;
class non_static메소드메인
{
public static void main(String[] args)
{
non_static메소드 mob = new non_static메소드();
int result1 = mob.Plus(10,20);
}
}
------------------------------------------------------
{
public static void main(String[] args)
{
non_static메소드 mob = new non_static메소드();
int result1 = mob.Plus(10,20);
}
}
------------------------------------------------------
- static 메소드( class 메소드 )
: static 메소드는 객체를 만들지 않고 class로 부터 직접 호출해야 한다.
물론 객체를 만들어 호출해도 에러는 없지만, static 메소드의 올바른 사용법이 아니다.
: static 메소드는 객체를 만들지 않고 class로 부터 직접 호출해야 한다.
물론 객체를 만들어 호출해도 에러는 없지만, static 메소드의 올바른 사용법이 아니다.
static 변수와 메소드는 객체가 생성되기 이전에 먼저 메모리에 로드되기 때문이다.
ex) -----------------------------------------
class static메소드
{
static int Plus(int a, int b) {
int c = a + b;
return c;
}
}
-----------------------------------------
import java.lang.*; // 디폴트로 import함
class static메소드메인
{
{
public static void main(String[] args)
{
{
int result = static메소드.Plus(10,20);
System.out.printf("result=%d\n",result);
System.out.printf("result=%d\n",result);
int a = Math.max(1,2); // java.lang.Math.max(1,2);
//max메서드가 static로 정의되어 있음.
System.out.printf("a=%d\n", a);
}
}
ps. static메서드는 인스턴스변수를 사용할수 없다.(인스턴스 변수는 인수턴스가 생성되야 만들어지
기때문에)
System.out.printf("a=%d\n", a);
}
}
ps. static메서드는 인스턴스변수를 사용할수 없다.(인스턴스 변수는 인수턴스가 생성되야 만들어지
기때문에)
static 메소드와 non-static 메소드의 차이점 2
정적 멤버변수를 갖는 클래스와 정적메소드
- static인 변수(정적멤버변수)가 private로 선언되어 있다면 그 변수를 사용하기 위한 메소드를
정의해야하는데 그때의 메소드는 클래스 차원에서 사용할수 있는 정적 메소드여야한다.
static메소드
- static인 변수(정적멤버변수)가 private로 선언되어 있다면 그 변수를 사용하기 위한 메소드를
정의해야하는데 그때의 메소드는 클래스 차원에서 사용할수 있는 정적 메소드여야한다.
static메소드
ex) -------------------------------------------------------
class StaticTest
{
private static int a =10;
private int b =20;
public static void setA(int new_a) ->정적메소드에서는 this를 사용하지 못함!
{
{
a = new_a; ( this.a = new_a;이렇게 쓰면 에러남)
} ->정적메소드에서는 인스턴스 멤버를 사용못함
( b = new_b; 인스턴스 멤버는 b를 사용하면 에러남)
public static int getA()
{
return a;
}
}
----------------------------------------------------------------
public calss StaticTestMain
{
public static void main(String[] args)
{
System.out.println(StaticTest.getA());
StaticTest s1 = new StaticTest();
s1.setA(1000);
.....
.....
}
}
- 메서드 반환
: 반환값이 없는경우 -> 자료형은 void
: 반환값이 없는경우 -> 자료형은 void
-> return ; 만 써주면 된다. ( 생략가능 )
: 반환값이 있는경우 -> return 반환값;
ps. 자료형과 반환값은 일치해야한다.
int add(~~)
{
......
return result; -> 반환값은 선언했던 자료형과 일치해야한다.
}
다형성
-> 메소드 오버로딩: 메소드명이 같고,메서드의 전달인자의 자료형이나 개수가 달라야한다.
ps. 메소드명이 같고, 전달인자의 자료형과 개수가 같고, 리턴형만 다른것은 Error 발생
-> 메소드 오버로딩: 메소드명이 같고,메서드의 전달인자의 자료형이나 개수가 달라야한다.
ps. 메소드명이 같고, 전달인자의 자료형과 개수가 같고, 리턴형만 다른것은 Error 발생
이런 메소드 오버로딩은 할 수 없다.
ex)------------------------------------------------------------
public class test2
{
int abs(int num) {
if(num<0) {num =-num }
return num;
}
long abs(long num) {
if(num<0) {num =-num }
return num;
}
double abs(double num) {
if(num<0) {num =-num }
return num;
}
}
------------------------------------------------------------
public class test2Main
{
public static void main(String[] args)
{
test2 mt = new test2();
int var1=-10, var11;
var11 = mt.abs(var1);
long var2=-20L, var22;
var22 = mt.abs(var2);
double var3=-10.2, var33;
var33 = mt.abs(var3);
...
...
}
}
Varargs( = variable Arguments 가변인자)
- JDK 5.0 이상에서 지원하는 기능
- JDK 5.0 이상에서 지원하는 기능
메소드 기능이 같고 전달인자 개수만 다른경우 메소드를 여러번 정의했었는데.. 가변인자를
사용하여 메소드정의를 한개만 정의해두고 다양하게 호출할수 있다.
형식은 다음과 같다. => ...
사용하여 메소드정의를 한개만 정의해두고 다양하게 호출할수 있다.
형식은 다음과 같다. => ...
ex) public class Mt
{
void prn( int ... num )
{
for (int i=0;i<num.length ;i++ )
{
System.out.print(num[i]+"\t");
}
System.out.println();
}
{
void prn( int ... num )
{
for (int i=0;i<num.length ;i++ )
{
System.out.print(num[i]+"\t");
}
System.out.println();
}
public static void main(String[] args)
{
Mt mtmain = new Mt();
mtmain.prn(10,20,30);
mtmain.prn(10,20);
mtmain.prn(10);
}
}
'C. Java' 카테고리의 다른 글
java 자바 변수 메소드 (0) | 2017.07.02 |
---|---|
java 자바 클래스 (0) | 2017.07.02 |
java 자바 레퍼런스 형변환 instanceof 알아보기 (0) | 2017.07.02 |
java 자바 문자열 관련 클래스 (0) | 2017.07.02 |
자바 패키지 import (0) | 2017.07.02 |