리뷰

아래의 소스코드는 자바7(2020.08.11) break문 예제 코드의 일부이다.

원래 예제에서는, 입력문자가 n 또는 N 일 때 반복문을 빠져나간다.

예제를 수정해서 입력문자가 y와 Y가 아닌 경우 반복문을 빠져나가도록 수정했다.

이때, 같은 경우의 논리OR 이, 아닌 경우에는 논리AND로 바뀌는 것을 확인하자!

while(...) {
	.
	.
	//ch=='N' || ch=='n'
    if (ch!='Y' && ch!='y')
    {
        // 반복문(while)을 빠져나갈 수 있는 코드 작성 필요
        //-- 위와 같은 의사표현을 했다면
        //   그동안 수행했던 반복문을 멈추고 빠져나가야 한다.
        
        break;        //-- 멈춘다. ( + 그리고 빠져나간다.) check~!!!
    }
}

메소드 (메서드, method)

지금까지 봐왔던 main() 도 메소드다.

 

*main() 메소드에 관한 고찰

- { } 영역 내에서 순차적으로 진행된다.

- 자바 프로그램은 main()을 시작하며 실행되고, main()이 끝나면 종료된다.

 

* 메소드의 사용을 '호출'한다고 표현한다.

* 메소드를 정의할 때 매개변수를 정의했으면, 메소드를 호출할 때 반드시. 예외없이. 꼭 매개변수를 전달해 줘야한다.

 

* 메소드의 형태 : 반환자료형 메소드이름(매개변수)

- 반환자료형은 메소드를 정의할 때 써주면 된다.

public static void actionTest(int a)	
{
	// 반환타입 == return 하는 자료형의 타입
    // 반환타입이 없다면 반환타입형 : void
    // actionTest 는 메소드 이름
    // int a 는 매개변수(== 인수 == 인자 == 파라미터)
    ...
}

변수의 스코프

* 변수의 가시범위 == 변수의 유효범위 == 변수가 보이는(영향력 끼칠 수 있는) 범위

 

* 메소드 안에서 선언된 변수(지역변수 == local 변수) → 가시범위 : 메소드 내의 영역

 

* 블럭 { } 안에서 선언된 변수 → 가시범위 : 선언된 { } 블럭 내의 영역

 

* if, for 등등의 구문 범위의 블럭 { } 안에서 선언된 변수는 블럭 밖에서 보이지 않는다.(영향력이 없다.)


지역변수

* 지역 변수는 초기화 과정을 거치지 않으면 사용할 수 없다. (자바가 자동으로 초기화를 수행해주거나 하지 않는다.)

/*=================================
  ■■■ 전역변수와 지역변수 ■■■
  - 지역변수의 초기화 테스트 실습
=================================*/

// Test071.java 와 비교~!!!(전역변수)

public class Test070
{

	// main 메소드
	public static void main(String[] args)
	{
		// 지역 변수 n
		int n;
		//-- 선언 후 초기화 과정을 거치지 않은 상태.

		System.out.println("n : " + n);
		//--==>> 에러 발생(컴파일 에러)
		//		 variable n might not have been initialized
		//-- 지역 변수 n 에 접근하여 그 값을 출력하고자 하는 구문
	}
}

전역변수

* 전역변수는 자바가 자동으로 0으로 초기화 해준다.

* 전역변수를 클래스 변수라고 부르면 안된다!! (중요!)

* 전역변수는 클래스의 생성 없이 사용할 수 없다.

 

* static 메소드인 main()함수에서 아직 생성되지도 않은(메모리에 로딩되지) 지역변수를 사용할 수 없다.

- static 변수나 static 메소드는 class가 로딩될 때 메모리에 올라간다.
- class의 멤버 변수는 인스턴스가 생성될 때 메모리에 올라간다. 

- main()함수에서 class의 인스턴스를 생성해야 멤버변수(전역변수)를 사용할 수 있다.

/*=================================
  ■■■ 전역변수와 지역변수 ■■■
  - 전역변수의 초기화 테스트 실습
=================================*/

// Test070.java 와 비교~!!!(지역변수)

public class Test071
{
	// 여러 자료형의 전역 변수 선언
	boolean bo;
	byte b;
	short sh;
	int a;
	long l;
	char ch;
	float f;
	double d;

	//-- 전역변수는 자동으로 0 초기화된다.
	
	public static void main(String[] args)
	{
		//System.out.println("a : " + a);
        // 안된다. 문법적으로 잘못됨. 클래스 생성 없이 사용 불가(main()이 static)
		
		// Test071 인스턴스 생성
		Test071 ob = new Test071();
		
		System.out.println("ob.bo : " + ob.bo);		//false
		System.out.println("ob.b : " + ob.b);		//0
		System.out.println("ob.sh : " + ob.sh);		//0
		System.out.println("ob.a : " + ob.a);		//0
		System.out.println("ob.l : " + ob.l);		//0
		System.out.println("ob.ch : " + ob.ch);		//0.0
		System.out.println("ob.f : " + ob.f);		//0.0
		System.out.println("ob.d : " + ob.d);		//0.0
	}
}

메소드의 재귀 호출

메소드 자신이 자신을 호출한다고 이해하면 어렵다. 똑같은 함수를 복사하여 새로운 함수를 만든 다음, 새로 만든 함수를 호출하는 방식이다.(조건을 만족할 때까지 새로운 함수를 계속 만든다)

/*=========================================
  ■■■ 메소드와 변수의 스코프 ■■■
  - 메소드의 재귀 호출
=========================================*/

public class Test069
{
	public static void main(String[] args)
	{
		showHi(5);
	}

	public static void showHi(int cnt)
	{
		System.out.println("Hi~ ");
		
		if(cnt==1)
			return;
		
		showHi(--cnt);
	}
}

// 실행 결과
/*
Hi~
Hi~
Hi~
Hi~
Hi~
계속하려면 아무 키나 누르십시오 . . .
*/


/* 잘못된 재귀함수 정의

	public static void showHi(int cnt)
	{
		System.out.println("Hi~ ");
		showHi(--cnt);
		
		if(cnt==1)
			return;
	}


----main() 에서 showHi(3); 호출한 상황----


	public static void showHi(3)	// 매개변수로 3 전달해보면
	{
		System.out.println("Hi~ ");	// 출력 하고
		showHi(2);					// showHi(2) 호출
		
		if(cnt==1)
			return;
	}

	public static void showHi(2)
	{
		System.out.println("Hi~ ");	// 출력 하고
		showHi(1);					// showHi(1) 호출
		
		if(cnt==1)
			return;
	}

	public static void showHi(1)
	{
		System.out.println("Hi~ ");	// 출력 하고
		showHi(0);					// showHi(0) 호출????
		
		if(cnt==1)
			return;
	}

	public static void showHi(0)
	{
		System.out.println("Hi~ ");	// 출력 하고
		showHi(-1);					// showHi(-1) 호출????
		
		if(cnt==1)
			return;
	}

	:
	무한 반복..
*/

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기