IT story/Java

D+6 Method(함수) Method, Parameter(매개변수), Multi Parameter

jason719 2016. 8. 8. 23:46

2016.08.08 Mon. 여섯번째 수업


오늘은 내용이 살짝 어려워서 글을 두 번에 나눠서 올립니다.


오늘의 수업 내용

  • Method (Stack & Heap 영역)
  • Parameter (매개변수를 이용해서 성적 출력하기)
  • Multi Parameter (멀티 매개변수를 이용해서 성적 출력하기)
1. Method (Stack & Heap 영역)
 메소드에 대해 이해하고 스택영역과 힙영역의 값을 호출할 때의 차이점을 이해하자
주석의 내용을 천천히 읽고 이해해보자

package com.javalesson.ch05method;


public class L01Method {

L01Method(){

System.out.println("L01Method 호출");

}

void heap(){}

public static void stackMethod(){

System.out.println("stackMethod 호출");


//일반 메소드는 thread가 실행될때 heap 영역에 메모리를 가진다.

//heap(); //heap()에 오류가 뜨는 이유는 참조할 메모리 위치가 없기 때문이다.

L01Method m = new L01Method();

//new연산자로 heap메모리에 L01Method()객체를 생성하여 메모리에 할당-> 변수 m이 위치를 참조

m.heap(); //객체 m이 가지고 있는 자원 heap()을 설계

}

public void heapMethod(){

System.out.println("heapMethod 호출");

stackMethod();

this.heap();//this는 해당 클래스 내부의 static이 아닌 것 접근

//L01Method.heap();//class명으로 접근하는 것은 static만 접근

//heap()을 사용할 수 있는 이유

//heapMethod()가 메모리에 할당되는 시점은 new 연산자로 heap 메모리에 생성할 때 이다.

//new연산자로 생성된 객체 내부에는 heapMethod()와heap() 모두 존재 한다.

//때문에 this(객체내부 접근) 접근자로 this.heap()을 접근할 수 있다.

L01Method.stackMethod();

//stackMethod()는 static으로 선언된 메소드로 JVM이 class파일을 실행 준비할때 stack메모리에 할당한다.

//stackMethod()는 이미 메모리에 할당돼서 참조할 위치가 있다.

//그래서 class명.method();으로 접근 가능

}

//public을 입력하면 다른 Package에서 접근이 가능하고, 없으면 동Package에서만 접근 가능


public static void main(String[] args) {

//heapMethod(),stackMethod()를 호출해 보시오.

//heap메모리를 참조하는 메소드는 new 연산자로 객체를 생성후 호출

//stack메모리를 참조하는 메소드는 바로 호출가능

//stack메모리에 있는 static함수 

L01Method.stackMethod(); //다른 클래스 메소드 접근시 사용

stackMethod();//클래스 내부이기에 가능

L01Method m = new L01Method();//생성자 호출

//new 연산자로 생성된 객체는 heap 메모리에 저장

m.heapMethod();

//m.stackMethod();//호출은 가능하지만 권장하지 않는다.

}//main end


}//class end




2. Parameter (매개변수를 이용해서 성적 출력하기)

메소드를 호출 하는 것을 다시 한번 살펴보자!


package com.javalesson.ch05method;


public class L02Parameter {

public void paramDemo(int score, String param_name){

//int score = 88;

char grade = 'A';

switch(score/10){

case 10: case 9: grade = 'A'; break;

case 8: grade = 'B'; break;

case 7: grade = 'C'; break;

case 6: grade = 'D'; break;

default : grade = 'F'; break;

}

char plus ='0';

//(조건식)?true:false;

plus =((((score+5)/10-score/10)==1)||score==100)?'+':'0';

//조건을 더해서 100점일때 A+가 되도록 해라.

System.out.println(param_name+"학생의 성적은 "+grade+plus+"입니다.");

}//성적 프로그램

public static void main(String[] args) {//args Parameter -> 매개변수

int score=100;

String name = "김장수";

//학생성적을 출력하자.

//paramDemo() 매개변수를 준다.

new L02Parameter().paramDemo(score,name);

}//main end


}//class end


3. Multi Parameter (멀티 매개변수를 이용해서 성적 출력하기)

다른 함수 2곳을 호출 할 때 어떻게 선언하는지 다시 한번 확인하기!

Boolean으로 판별할 때 return 넣는거 이해하기

다른 클래스 참조 하는 거 이해하기


package com.javalesson.ch05method;


import java.util.Scanner;


public class L03MultiParameter {


public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("아이디는: ");

String id = scan.nextLine();

System.out.println("비밀번호는: ");

int pw= scan.nextInt();

//LoginTest.loginDemo()를 호출해서 Login을 성공하시오.

loginTest l = new loginTest();

new loginTest().printLogin(l.loginDemo(id,pw));

}//main end


}//class end

class loginTest{

//public void loginDemo(String id, int pw){

//if( (id.equals("javalesson")) && (pw==1234) ){

// System.out.println("login 성공");

//}else{

// System.out.println("login 실패");

//}

public boolean loginDemo(String id, int pw){

boolean login=false;

if(id.equals("javalesson")&&pw==1234){

return true;

}else{

return false;

}

}//loginDemo end

public void printLogin(boolean login){

if(login==true){

System.out.println("login 성공");

}else{

System.out.println("login 실패");

}

}//printLogin end

}//class end