학원 6일차 - Java

·2021년 4월 5일
0
post-thumbnail

2021.04.05

메소드

  • 메소드(Method), 함수(Function), 프로시저(Procedure), 서브루틴(Sub Routine)
  • 코드의 집합
  • 특정 목적을 가지고 행동하는 코드의 집합(★중요)
  • 재사용 가능한 코드 단위(★중요)
  • 유지보수성 높음(수정하기 쉽다.) > 반복잡업에 한해서..
  • 코드를 성격에 따라 구분지어 관리 > 관리 용이(물리적인 부분)
  • 재사용(★★★★) -> 다량의 코드도 1번의 호출로 재사용이 가능
  • 메소드는 쪼갤 수 있을 만큼 쪼개서 추출하면 좋음 -> 갖다 쓰기 좋음.
  • 메소드 사용법

    1. 메소드 선언하기(정의) x 1회
    2. 메소드 호출하기(사용) X N회
  접근지정자 접근키워드 반환자료명 메소드명(인자리스트)
  {
  		 
  }
Public state void 메소드명() //메소드 헤더, 시그니처(Signature)
{ //메소드 바디, 구현부
			실행 코드;
}
  • main메소드
    • 특수 메소드
    • 이름이 예약어이다.(main) : 통상 프로그램을 통틀어 유일해야한다.
    • 개발자(사람)가 호출하는 메소드가 아니라 > JVM에 의해서 호출한다.(시스템호출) -> 해당 프로그램이 실행될 때 가장 먼저 main() 호출한다. -> 콜백 메소드(Callback Method)
    • 프로그램의 시작점(Entry Point) ~ 프로그램의 종착점(End Point)
  • 메소드 선언 위치
public class Ex13_Method {
    
	public static void main(String[] args) {
        
         //이 안에서는 메소드 선언 불가능
        
    } //main메소드 끝
   
//여기서 메소드 선언 가능
//- 클래스 매부에서 작성 가능
//- 클래스 외부에서 작성 불가능
//- 메소드내에서 메소드 선언 불가능
//- 메소드끼리 선언 순서는 무관
    
} //Ex13_Method (클래스) 끝

//이곳은 메소드 선언 불가능
public class Ex13_Method {
    
	public static void main(String[] args) {
    
        
        //요구사항) "안녕하세요." x5회
		//수정사항) "안녕하세요" -> "반갑습니다."로 수정
		
		//복붙 -> 하드코딩
		//프로그래밍 기술 -> 한번 짠 코드를 어떻게 하면 다시 안짜고 재사용할 수 있을까?
		
		System.out.println("반갑습니다.");
		System.out.println("반갑습니다.");
		System.out.println("반갑습니다.");
		System.out.println("반갑습니다.");
		System.out.println("반갑습니다.");
		System.out.println("반갑습니다.");
		
       
	//2. 메서드 호출하기
	// - 선언한 메소드의 이름을 부른다.
    //제어가 hello() 메소드 정의된 곳으로 이동한다. > hello() 실행을 마치고 이곳으로 제어가 되돌아온다.     
	hello(); 
	hello();
	hello(); 
    hello();
	hello();
        
    }//main 
    
	//1.메소드 선언
	//hello : 메소드 이름, 정의/ 호출에 사용된다. 
	public static void hello() {
   	 	//인사하는 코드 
		System.out.println("반갑습니다~~");
	}
    
}//Ex13_Method
public class Ex13_Method {
    
	public static void main(String[] args) {
        calc();
		calc();
    }
    public static void calc() {
		int a = 10;
		int b = 20;
		
		System.out.println(a + b);
	}
    
}
  • 메소드를 만드는 이유
    • 메소드를 성격에 따라 별도의 메소드로 분산시켜 놓으면 가독성이 좋아지고 재사용이 쉬워진다. (메서드를 쪼갤 수 있는 한 쪼개놓자.)

//메서드가 다르면 변수명이 같아도 된다.
public static void aaa(int num) {
	int a;
	//int a; -> 같은 메서드 안에서는 같은 이름의 변수 사용 불가.
}
public static void bbb(int num) {
	int a;
}

메소드명은 같은 이름을 2개 쓸 수 없다.
public static void test() {
			
}

  • 메소드 인자 리스트
    • 파라미터(Parameter)
    • 인자(Argument)
    • 매개변수
    • 가인자/실인자
    • 메소드 호출 시 전달하고자 하는 데이터 전송하는 역할
    • (소극적) 다형성 구현
public class Ex14_Method {
    
	public static void main(String[] args) {
        hello();
        hello2();
    	//hello245(); //누구? -> 메소드명 만들기도 힘들다.. 의미있게.. -> 식별자 뒤에 숫자x 
	}
    
    //'홍길동'에게 인사하는 메소드를 구현하시오.
	public static void hello() {
		System.out.println("홍길동님. 안녕하세요.");
	}
    
    //'아무개'에게도 인사를 하는 메소드를 구현하시오.
	public static void hello2() {
		System.out.println("아무개님. 안녕하세요.");
	}
    
    //우리반 30명에게 인사를 하는 메소드를 구현하시오.
	//- 메소드를 30개 추가 선언하기
	//- 대한민국 국민들에게 각각 인사를 하는 메소드를 구현하시오.
	//- 전세계 모든 사람들에게 각각 인사를 하는 메소드를 구현하시오. -> 78억개
	public static void hello3() {
		System.out.println("도라에몽님. 안녕하세요.");
	}
	
	public static void hello4() {
		System.out.println("피카츄님. 안녕하세요.");
	}
}
public class Ex14_Method {
    
	public static void main(String[] args) {
        //public static void hi(String){}
		//hi(); -> 에러 The method hi(String) in the type Ex14_Method is not applicable for the arguments()
		
		hi("홍길동");
		hi("아무개");
		hi("호호호");
		hi("하하하"); //실인자(Actual Argument)
        
        //매개변수 사용시 주의점!!!
		// -> 가인자와 실인자의 갯수가 동일해야한다.
		// -> 가인자와 실인자의 자료형이 동일해야한다.
		// -> 형변환이 가능하면 자료형이 동일하지 않아도 된다. 
		
		//hi();
		hi("홍길동");
		//hi("홍길동", "아무개"); 
		//hi(100);
    }
    
    public static void hi(String name) { //매개변수, 가인자(Formal Argument)
		
		//String name = "홍길동"; // -> 에러 Duplicate local variable name
		
		System.out.printf("%s님 안녕하세요\n", name);
	}
    
}
public class Ex14_Method {
    
	public static void main(String[] args) {
        //public static void bye(String name, int age)
		bye("홍길동", 20);
		bye("뽀로로", 5);
        
        byte b = 10;
		bye("홍길동", b);
		//bye("홍길동", (int)b); //byte(String name, int age) --> 암시적형변환
        
    }
    //타입 상관없이 넣고 싶은 갯수만큼 매개변수를 사용할 수 있다. 
	public static void bye(String name, int age) {
		//인삿말을 다르게 하고 싶어.
		//10세 이상 > 안녕하세요
		//10세 이하 > 안녕~
		
		String result = age >= 10 ? "안녕하세요" : "안녕~~";
		
		System.out.printf("%s님 %s\n", name, result);
		
	}
}
public class Ex14_Method {
    
	public static void main(String[] args) {
        //2개의 숫자를 입력받아 연산과정 출력
		//하드코딩
		int n1 = 10;
		int n2 = 20;
				
		System.out.printf("%d + %d = %d\n", n1, n2, n1 + n2);		
			
		n1 = 5; 
		n2 = 9;
		
		System.out.printf("%d + %d = %d\n", n1, n2, n1 + n2);		
		
		n1 = 22;
		n2 = 123;
		
		System.out.printf("%d + %d = %d\n", n1, n2, n1 + n2);		
		
		//동일한 코드 중복 발생 -> 수정이 힘듦..
		
        //메서드를 사용해서 재사용
		add(n1, n2);
        
		n1 = 111;
		n2 = 222;
		
		add(n1, n2);
		n1 = 1;
		n2 = 2;
		
		add(n1, n2);
        
    }
    public static void add(int n1, int n2) { 
		//int n1 = 10;
		//int n2 = 20;
		System.out.printf("%d + %d = %d\n", n1, n2, n1 + n2);
	}
}

  • 반환값
    • 메소드 실행 후 돌려받은 데이터
    • 누가 돌려받는지? > 메소드를 호출한 곳에서 반환값을 돌려받는다.
public static 반환타입 메소드명(인자 리스트){
	실행코드;
}
public class Ex15_Method {

	public static void main(String[] args) {
        //m1(); //반환값 num이 남는다. 
        
        int result = m1(); //리턴값을 담을 변수를 선언, 메소드의 반환값을 받아서 콘솔에 출력
		
		System.out.println(result);
        
    }
    //반환값이 있는 메소드를 선언했다.
	//반환타입과 반환값의 타입이 일치해야한다.
	public static int m1() {
		int num = 100;
		
		return num; //return문, 반환문
		//return 100, 200,300; -> 여러개를 반환할 수 없음 
	}
}
  • 인자값은 여러 개를 넘길 수 있는데 반환값은 1개만 넘길 수 있다.

public class Ex15_Method {

	public static void main(String[] args) {
        System.out.println(add(10,20)); //바로 메서드를 확인만 할 때
		
		//메소드 = 함수 -> 수학의 함수 정의 f(x) = y
		int n = add(30, 40); //지속적으로 쓰고 싶을땐 반환값을 변수에 저장해서 사용
		System.out.println(n);
        
    }
    //void : 돌려줄 값이 없다.
	public static int add(int a, int b) {
		return a + b;
	}
}
public class Ex15_Method {

	public static void main(String[] args) {
        int age = 25;
		String result2 = check(age) ? "미성년자" : "성인";
		
		System.out.println(result2);
    }
    //나이에 따라 성인인지 미성년인지 확인해주는 메서드
	public static boolean check(int age) {
		return age >= 19 ? true : false;
	}
}
public class Ex15_Method {

	public static void main(String[] args) {
        
    }
    //This method must return a result of type int
	//반환값을 int타입을 써야한다.
	//public static void test() {
	//	return 100;
	//}
	
	//메소드가 실행을 종료하고 호출된 곳으로 돌아가는 경우
	//1. 메소드의 끝(})을 만났을 때.
	//2. return문을 만났을 때.
	
	public static int test() {
		
		System.out.println("테스트1");
		
		return 100;
		
		//리턴 뒤에 코드를 적으면 안된다.
		//System.out.println("테스트2"); //Unreachable code
	}
}
profile
모르면 괴롭고 알면 즐겁다.

0개의 댓글