본문 바로가기

자바/객체지향

Method 메서드

예제1)


public class Test1 {

public static void main(String[] args){


Ex1 oo=new Ex1(); // Ex1 oo; oo=new Ex1; 과 같다 new 다음 생성자.

double a=oo.pow(2, 10); // 2,10:실인수 pow의 함수 값은 double 이므로 double로 설정

System.out.println("2의 10승 : " +a);


char aa=oo.upper('b');

System.out.println("b:"+aa);


System.out.println("b:"+oo.isUpper('b'));

System.out.println("A:"+oo.isUpper('A'));


int aaa=oo.sum(3,1);

System.out.println("두 수의 합 : " +aaa);

System.out.println("두 수의 합 : " +oo.sum(3,1));

}

}


class Ex1 {

// 두정수중 최대값을 구하는 메소드

public int max(int x,int y) {

if(x>y)  // return x>y?x:y; 삼항연산자

return x;

return y;


// 두정수의 적은수에서 큰수까지 합구하기

public int sum(int x,int y) {

int s=0;

if(x>y){

for(int i=y; i<=x; i++)

s+=i;

} else {

for(int i=x; i<=y; i++)

s+=i;

}

return s;

}

//중복정의

public int sum(int n) {

int s=0;

for(int i=1; i<=n; i++)

s+=i;

return s;

}



// 대문자인지 소문자인지 판별

public boolean isUpper(char ch) {

if(ch>='A' && ch<='Z')

return true;

return false;

}



public char upper(char ch) {

char a;

if(ch>='a' && ch<+'z')

a=(char)(ch-32);

else

a=ch;


return a;

}


public double pow(int m,int n) { // m,n : 가인수(형식매개변수)

double s=1;

if(n>=1){

for(int i=1; i<=n; i++)

s*=m;

}else{

for(int i=1; i<=(-n); i++)

s/=m;

}

return s; // void인경우만 생략 가능 // s값을 불러온놈에게 되돌려주라는 이야기.

}

}


예제1 결과)


2의 10승 : 1024.0

b:B

b:false

A;true

두 수의 합 : 6

두 수의 합 : 6


=======================================================================================================================================


예제2)


public class Test2{

public static void main(String[] args) {

Ex2 oo=new Ex2();


byte a=10; //Ex2 클래스에 해당 자료형을 가지는 메소드가 없기 때문에 byte와 가장 가까운 short인자의 중복정의 메소드로 적용되어 출력

short b=20;

char c='A';

int d=30;

long e=40;


oo.print();

oo.print(a);

oo.print(b);

oo.print(c);

oo.print(d);

oo.print(e);


Short ss=20; // short Wrapper 클래스 : 기본 자료형을 클래스로 만들어놓은것

short aa=30; // 5번줄과 동일

int bb=40;

long cc=50;  


oo.write(ss);

oo.write(aa);

oo.write(bb);

oo.write(cc);

}

}


// overloading : 중복정의

// 메소드의 이름은 동일(모두 print)하지만 '인수의 개수가 다르거나', '인수의 형이 다르면' 다른 메소드로 취급

class Ex2{

public void print() {

System.out.println("인자가 없는것........");

}

/*

public int print() {

System.out.println("인자가 없는것........"); // return타입만 다르면 오버로딩 되지 않는다.(인수의 갯수와 인수타입이 같고)

}

*/

public void print(short s) {

System.out.println("short 인자 : "+ s);

}


public void print(int s) {

System.out.println("int 인자 : "+ s);

}


public void print(long s) {

System.out.println("long 인자 :" +s);

}


public void write(Short s) {

System.out.println("short 인자 : "+ s);

}


public void write(int s) {

System.out.println("int 인자 : "+ s);

}


public void write(Long s) {

System.out.println("long 인자 : "+ s);

}

}


예제2 결과)


인자가 없는것........

short 인자 : 10

short 인자 : 20

int 인자 : 65

int 인자 : 30

long 인자 :40

short 인자 : 20

int 인자 : 30

int 인자 : 40

long 인자 : 50


=======================================================================================================================================


예제3)


public class Test3 {

public static void main(String[] args) {

Ex3 ob=new Ex3();

ob.print(5);


System.out.println(ob.sum(100)); //매개변수가 sum메소드의 조건에 부합하지 않을 때까지 지속적으로 호출 -> 20번줄 : 1보다 큰 2가 될때까지 호출


ob.binary(125);

System.out.println();


System.out.println("45와 18의 최대공약수 : "+ob.gcm(45,18));

}

}


class Ex3 {

// 되부름(Recursion). stack에 임시로 저장

public void print(int n) {

if(n>0)

print(n-1);


System.out.print(n+"   ");

}


public int sum(int n) {

return n>1?n+sum(n-1):1;

}


// 10진수(양수)의 2진수로 변환

public void binary(int n) {

if(n<2)

System.out.print(n);

else {

binary(n/2);

System.out.print(n%2);

}

}


//최대공약수 구하기

public int gcm(int a,int b) {

return b==0?a:gcm(b,a%b);

}


// a의b승 구하기. 단 b가 양수라는 가정.

public void pow(int a, int b) {

return b<1?1:a*pow(a,b-1);

}


예제3 결과)


0    1    2    3    4    5    5050

1111101

45와 18의 최대공약수 : 9


=======================================================================================================================================


예제4)


public class Test4 {

public static void main(String[]args) {

Ex4 ob=new Ex4();


int a,b,c;

a=ob.sum(1,2,3,4,5,6,6,7,8,910);

b=ob.sum(2,3,4,8,10);

c=ob.sum(3,6,9);


System.out.println(a);

System.out.println(b);

System.out.println(c);

}

}



class Ex4{

/* 부정인수는 메소드에 하나만 올 수 있다. 부정인수는 우측에 있어야만 한다.

void print(int a, float... aa){}  // 가능

void print(int a, float... aa){}  // 불가능

void print(int a, float... aa){}  // 불가능

*/


public int sum(int ... args) { // ...(부정인수) 인자안에 들어오는 자료형만 똑같다면 갯수상관없이 자료를 받는다.

int s=0;

/*, 아래 식과 동일하다

for(int i=0; i<args.length; i++)

s+=args[i];

*/

for(int n:args)

s+=n;


return s;

}

}


예제4 결과)


952

27

18


=======================================================================================================================================


예제5)


public class Test5 {

public static void main(String[] args){

System.out.println("명령행인수개수:"+args.length);


for(int i=0; i<args.length; i++)

System.out.println("args["+i+"}:"+args[i]);

}

}


/*

// 명령행 인수 :aa bb cc -> args 에 들어간다.

cmd>java Test5 aa bb ccc

args[0]<-"aa"

args[0]<-"bb"

args[0]<-"cc"

*/


예제5 결과) 


이 결과는 에딧플러스의 메뉴의 [도구] - [사용자 도구 구성(C)...] 에서 자바실행을 설정한 항목의 인수 설정값에 $(FileNameNoExt) $(Prompt) 값을 주어서 확인하였다.


aa, bb, cc값을 줘서 확인함


=======================================================================================================================================


예제6)


public class Test6 {

public static void main(String[] args){

Ex6 ob1=new Ex6(); // ob1의 num

Ex6 ob2=new Ex6(10); // ob2의 num


System.out.println(ob1.getNum());

System.out.println(ob2.getNum());


ob1.setNum(20);

System.out.println(ob1.getNum());

System.out.println(ob2.getNum());

}

}


class Ex6{

private int num; // 초기화:0. 클래스내에서 전역변수


public Ex6() {

//Ex6(50); //오류:생성자는 일반 메소드처럼 호출불가

  // 클래스 객체=new 생성자(); 만 가능 

this(50);    // 다른 생성자 호출(몸체실행) 단, 생성자에서만

System.out.println("인자가 없는 생성자");

}

// this는 호출한 객체 자신을 나타내는 키워드

public Ex6(int num) {  // Ex6(int num):지역변수

this.num=num; // this=ob2-> this.num의 num은 전역변수 num

System.out.println("인자가 있는 생성자");

}


public void setNum(int num) {

this.num=num;

}

public int getNum(){

return num; // 실제로는 return this.num; 으로 this. 이 생략된 것임.

}

}


예제6 결과)

인자가 있는 생성자
인자가 없는 생성자
인자가 있는 생성자
50
10
20
10

=======================================================================================================================================


예제7)


public class Test7 {

public static void main(String[] args){

Ex7 oo;

// System.out.println(oo); // 컴파일오류


Ex7 ob=null; // 객체의 null은 메모리를 할당하지 않은 초기상태.

System.out.println(ob);

// System.out.println(ob.a);// 런타임오류


ob=new Ex7();


int a=70;

ob.sub1(a); // a:실인수. 실인수와 가인수는 기억 공간 따로 확보.

System.out.println(a); // 70

System.out.println(ob.a);      // 0


ob.sub2(ob);

System.out.println(ob.a);      // 0


ob.sub3(ob);

System.out.println(ob.a);      // 50


Ex7 ob1 = new Ex7();

Ex7 ob2=ob1;

ob2.a=100;

System.out.println(ob1.a);

System.out.println(ob2.a);

}

}


class Ex7{

int a;


public void sub1(int a){ // a:가인수. 메소드안에서만 유효하다. ->6번줄의 명령을 받아 50이 되었지만 메소드를 벗어나면서 70이된다.

a=50;

}


public void sub2(Ex7 oo){

oo=null;

}


public void sub3(Ex7 oo) {

oo.a=50;

}

}


예제7 결과)


null

70

0

0

50

100

100


=======================================================================================================================================


예제8)


public class Test8{

public static void main(String[] args) {

Ex8 ob1=new Ex8();

Ex8 ob2=new Ex8();


ob1.num=10;

ob2.num=10;

//Object 클래스 : 모든 클래스의 최상위 클래스


// toString() 메소드는 Object 클래스의 메소드로 하위클래스에서는 상위클래스의 메소드나 멤버변수를 자유로히 사용할 수 있다.

// 단 접근제어자가 private인 경우에는 사용 불가

//결과 : 클래스이름@해쉬코드

//해쉬코드는 VM이 객체를 빠르게 검색할 목적으로 사용되며 객체가 같으면 해쉬코드가 같지만

//해쉬코드가 같다고 같은 객체는 아니다.

System.out.println(ob1.toString());

System.out.println(ob2.toString());

System.out.println(ob1); //ob1.toString()와 동일

System.out.println(ob2);


System.out.println(ob1==ob2);         // '==' 은 ob1과 ob2가 가리키는 위치가 같은지 비교

System.out.println(ob1.equals(ob2)); // ob1과 ob2가 가리키는 위치가 같은지 비교

}

}



class Ex8{ // 상위클래스 : Object

int num;

public void print() {

System.out.println("num:"+num);


}

}


예제8 결과)


Ex8@64883c

Ex8@2c1e6b

Ex8@64883c

Ex8@2c1e6b

false

false

'자바 > 객체지향' 카테고리의 다른 글

static 키워드  (0) 2013.05.21
업캐스팅 다운캐스팅  (0) 2013.05.19
재정의(override), 중복정의(overloading)  (0) 2013.05.19
자바의 상속  (0) 2013.05.19
객체지향을 위한 첫걸음 class 클래스  (0) 2013.05.13