학원 7일차 - Java

·2021년 4월 6일
0

2021.04.06

자바 변수 종류

  • 클래스 멤버 변수
  • 지역 변수

지역변수, Local Variable

  • 변수는 자신의 영역이 존재한다.(자신이 활동할 수 있는 지역) > Scope
  • 지역을 벗어나면 사용이 불가능(접근이 불가능)하다.
public class Ex16_Method {

	public static void main(String[] args) {
        //Local Variable, 로컬변수, 지역변수
		//- 여태 수업했던 모든 변수는 지역 변수이다.
		int a = 10; //main()메소드를 자신의 영역으로 하는 지역 변수이다.
        
        m1(); //Ctrl+1 > 메소드 자동생성 단축키
        
        System.out.println(a);
		//System.out.println(b); //에러 -> m1 지역 변수를 main 지역에서는 접근 불가능
		
		//지역이 다르면 같은 이름의 변수명을 사용할 수 있다.
		String name = "아무개";
        
    }//main
    
    private static void m1() {	
		
		String name = "아무개";
		
		//a cannot be resolved to a variable
		//System.out.println(a); // 에러 -> 지역변수라서..
		
		int b = 20; //m1()을 자기 영역으로 가지는 지역변수 
		
		System.out.println(b);
    }

}

변수의 생명 주기, Life Cycle

  • 변수가 언제 태어나고, 언제 죽는지?
  • 변수가 언제 메모리에 할당이 되고, 언제 메모리에서 해제가 되는지?
  • 변수는 변수 선언문이 실행되는 시점에 태어난다.(메모리에 할당)
  • 변수는 자신이 속한 블럭에서 제어가 벗어나는 순간 죽는다.(본인이 속한 메서드가 실행을 마칠때)(메모리에서 소멸된다.)
  • 메인메서드에는 변수를 많이 안만드는 것이 좋다.(메인메서드안의 지역변수의 생명주기가 길기 때문에 메모리를 더 많이 잡아먹는다. 메서드의 지역변수의 생명주기가 더 쩗음.)

메소드 오버로딩, Method Overloading

  • 같은 이름의 메소드를 여러개 만드는 기술
  • 메소드가 인자 리스트의 형태를 다양하게 구성해서 동일한 메소드명을 가질 수 있게 하는 기술
  • 프로그램 성능(x), 개발자에게 도움(o)

메서드 오버로딩의 조건 O

  1. 인자의 갯수
  2. 인자의 타입

메서드 오버로딩의 조건 X

  1. 인자의 이름
  2. 반환값의 타입
//메서드 선언하는 중..

1. public static void test() {} 		 	 //o
2. public static void test() {} 		 	 //x ->1번 메소드가 있어서 에러
3. public static void test(int n) {}    	 	 //o
4. public static void test(int m) {}    	 	 //x -> 3번 메소드가 있어서 에러
5. public static void test(String s) {} 	 	 //o
6. public static void test(int n, int m) {} 	         //o
7. public static void test(int n, String s) {} 	         //o
8. public static void test(String s, int n) {}           //o
9. public static String test(int n) {}		         //x -> ★중요
public class Ex17_Overloading {

	public static void main(String[] args) {
		test();
		test(10); // -> 같은 이름의 메소드라도 매개변수로 실행할 메서드 구별 가능 
		test("홍길동");
		
		//9.
		//String result = test(10);
        
    }//main
    
    //같은 이름의 메소드를 두개이상 만들 수 없다. > 어떤 걸 실행해야할지 모르기 때문에 (구분불가)
    //1.
	public static void test(){
		System.out.println("사과");
	}
    
	//2.
	//public static void test(){
	//	System.out.println("딸기");
	//}
	
	//3.오버로딩
	public static void test(int n){
	
	}
    
    //4.
	//public static void test(int m){
	//	
	//}
	
    //5.
	public static void test(String s){
		
	}
	
	//9. Duplicate method test(int) in type Ex17_Overloading
	//public static String test(int n){
	//	return "홍길동";
	//}

}

재귀 메소드, Recursive Method

  • 메소드가 자신의 구현부에서(body) 자신을 호출하는 구문을 가지는 메소드
  • 자기가 자기를 호출하는 메소드
public class Ex18_Recursive {

	public static void main(String[] args) {
        //test();
        
    }//main
    
    //test()메소드의 호출 횟수 : 무한대
	public static void test() {
		//Exception in thread "main" java.lang.StackOverflowError
        //메모리가 꽉차서 더이상 아무것도 못합니다.
		System.out.println("테스트입니다.");
		
		test(); //★★
	}
    
}
public class Ex18_Recursive {

	public static void main(String[] args) {
        //팩토리얼
		//4! = 4 x 3 x 2 x 1
		//4! = 24
        
        int n = 4;
		
		int result = factorial(n);
		
		System.out.printf("%d!= %d\n", n, result);
        
    }//main
    	public static int factorial(int n) {
		int temp = (n == 1) ? 1 : n * factorial(n-1);
		
		return temp;
	}
    
}

profile
모르면 괴롭고 알면 즐겁다.

0개의 댓글

관련 채용 정보