리뷰
아래의 소스코드는 자바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;
}
:
무한 반복..
*/
'자바 풀스택 과정 수업 정리 > 자바' 카테고리의 다른 글
자바 10-1 (2020.08.14) : 생성자, this 키워드, 초기화블럭 (0) | 2020.08.22 |
---|---|
자바 9 (2020.08.13) : 객체지향 프로그래밍에 대해(기초) (0) | 2020.08.18 |
자바 7 (2020.08.11) : while, do~while, for, break (0) | 2020.08.13 |
자바 6 (2020.08.10) : if ~ else, switch, break (0) | 2020.08.13 |
자바 5 (2020.08.07) : 조건연산자, if ~ else if ~ else (0) | 2020.08.11 |
최근댓글