[JAVA_입문_수업] 2장 : 문법
해당 게시글은 JAVA_입문_수업 을 공부하며 정리한 글입니다.
IF_조건문
자바의 경우 if와 아래의 닫힌중괄호’}’를 보고 한 블럭임을 파악해야한다.
들여쓰기로 블록을 구성하는 파이썬과 달리, 자바는 {} 중괄호를 사용한다. 그래서 한눈에 깔끔하게 구조를 파악하는데에 불리한 것 같다.
특히나, 파이썬의 경우 if ~ else ~ elif 구문처럼 중첩을 할 시에, 각 단어가 하나의 세로줄에 들여쓰기가 되어있어 조건문 구조 파악하기가 편함.
1. 기본 구조
-
Booealn(불린) : true, false
-
조건문은 if절과 then절로 나뉜다.
- if절이 true일 때, then절이 실행된다.
- if절이 true일 때, then절이 실행된다.
-
구성
-
if : 기본적으로 사용되는 것. true이면 해당 then절을 실행(false이면 다음으로 넘어감)
-
else if : 앞의 if, else if절이 false일 때, 실행된다. 마찬가지로 true이면 해당 then절을 실행.
-
else : (Boolean)이 존재하지 않는다. 앞에서의 조건 절이 모두다 false이면 else의 then절을 무조건 실행시킨다.
- if, else if, else 중 우선적인 Ture인 if절에 대해
하나만!
실행된다.
- if, else if, else 중 우선적인 Ture인 if절에 대해
-
# 기본 형식
if(Boolean){
명령문;
}
# if ~ else
if(Boolean){
명령문1;
} else {
명령문2;
}
# if ~ else if ~ else
if(Boolean){
명령문1;
} else if(Boolean) {
명령문2;
} else {
명령문3;
}
2. 조건문의 응용 - 로그인
입력값(id,pw)을 받아 둘 다 맞으면 “right”출력, 틀리면 “wrong” 출력
package org.java.eclipse; # 패키지명
public class LoginDemo { # 클래스명 / 이는 파일(.java)명과 같아야함
# 메인 메소드 생성(클래스 필수요소)
public static void main(String[] args) { # args에 입력값 저장(공백으로 구분)
String id = args[0]; # 입력값 저장1
String password = args[1]; # 입력값 저장2
if (id.equals("egoing")) { # 문자열 비교는 equals!
if (password.equals("111111")) {
System.out.println("right");
} else {
System.out.println("wrong");
}
} else {
System.out.println("wrong");
}
}
}
1) 입력
-
입력한 값이 args에 배열로 임시저장(공백으로 분리되어)
-
이를 변수에 저장 : args[0], args[1], …
public static void main(String[] args)
2) 입력값이 필요한 파일 실행방법
-
- 터미널을 켠다
-
- 실행파일(.class)이 있는 bin으로 이동
- (cd ~/Repository/JAVA_Web/JAVA_tutorials/bin)
-
java ~/(directory of package) (클래스명) (입력값)
- java org.java.eclipse.LoginDemo egoing 111111
switch문
if문과 switch문은 서로 대체 가능한 관계.
그렇기에 사용빈도는 적지만, 조건이 많다면 switch문이 로직을 보다 명료하게 보여줄 수 있음
1) 기본 구조
switch ~ case
switch(번호)의 번호에 따라 해당 case부터 break를 만날때까지 차례대로 명령어가 실행된다.
아래 코드이 경우 break가 없기 떄문에 2에서 시작했다면 2,3번까지 출력한다.
(case 문법을 보자면 :과 들여쓰기를 통해서 블록이 형성됨을 볼 수 있는데, 파이썬처럼 할 수 있으면서 왜 다른건 괄호쓰냔 말이다.)
switch(2){
case 1:
System.out.println("one");
case 2:
System.out.println("two");
case 3:
System.out.println("three");
}
2) default
switch에 매개변수로 숫자가 입력되었지만, 해당 숫자에 맞는 case가 없다면?
아무 실행 없이 종료할 수 있지만, default를 사용함으로서 최소 한 번 실행할 수 있다.
(if문의 else와 같은 존재!)
switch(3){
case 1:
System.out.println("one");
case 2:
System.out.println("two");
default :
System.out.println("default");
break;
}
3) switch 조건 주의점
switch의 조건에는 몇가지 제한된 데이터 타입만을 사용 가능
- byte, short, char, int, enum, String, Character, Byte, Short, Integer
반복문
반복문에는 대표적으로 while과 for가 존재하며, if와 switch의 관계처럼 대체가능한 관계이다.
1. while
1) 기본구조
조건(true/false)에 따라 언제까지 진행되는지 정해진다.
- 하지만 조건을 항상 만족하거나 break를 만나지 않으면 무한 반복을 발생시킨다.
while(조건){
반복 실행 영역;
}
2) 예시
종료조건을 제대로 설정하지 않으면, 무한 반복이나 실행이 되지 않기 떄문에 제대로된 조건설정(시작, 과정, 종료)이 중요하다.
-
시작 : 아래는 i가 0부터 시작하여
-
과정 : 1씩 증가하고
-
종료 : 10을 초과하면 중지를 하게된다.
- 결과적으로 1부터 9까지 출력된다.(다만 종료시 i는 10임에 주의!)
int i = 0;
// i의 값이 10보다 작다면 true, 크다면 false가 된다. 현재 i의 값은 0이기 때문에 이 반복문은 실행된다.
while(i<10){
System.out.println(i);
// i의 값에 1을 더한다. 반복문의 중괄호의 마지막 라인에 도달하면 반복문은 반복문을 재호출한다. 이때 i<10의 값을 검사하게 된다.
i++;
}
for문(중요)
while문을 보면 반복의 횟수를 지정하기 위해서 while문 외부에 변수 i의 값을 초기화하고, while문 안에서 i의 값을 증가시키고 있다.
반복문에서 자주 사용하는 이러한 패턴을 문법적인 형태로 만든 것이 for문이다.
1) 기본구조
-
;(세미콜론)은 2개 사용된다. 쉼표가 아닌 세미콜론임에 주의!
-
초기화 부분에서 변수(i,j,k,..) 선언과 동시에 초기화해주어도 된다.(파이썬처럼 자료형 빼먹지 마라!)
for(초기화; 종료조건; 반복실행){
반복적으로 실행될 구문;
}
2) 예시
위 while문에서의 예시와 동일한 결과가 나온다.
0에서 시작해, 1개씩 증가(i++)하며, 10을 초과할 때 종료한다.
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
3) break
반복문을 종료하기 위해 종료조건을 만족시키는 방법도 있지만, break를 통해 for문을 종료할 수도 있다.
이는 switch, while에서도 사용가능하다.
실제 사용 시 break 딱 하나만 사용하기보다, 특정 조건을 만족할 때 사용하기 때문에 보통 if~break
로 사용한다.
아래 예시의 경우 0부터 4까지 출력한다.
-
0부터 시작
-
1씩 증가하다가
-
5일 때 종료.(5출력 x)
for (int i = 0; i < 10; i++) {
if (i == 5)
break;
System.out.println(i);
}
4) continue
break는 반복문 자체를 종료시킨다. 그러나 i가 증가 또는 감소하다가 특정 반복에서만 실행되지 않고, 그 이후는 다시 실행되게 하려면?
continue를 사용하면 된다.
아래의 경우에는 5를 제외한 0에서 9까지 출력된다.
-
0에서 시작
-
1씩 증가
-
i가 5일 때 continue가 실행되며 그 아래의 명령문은 생략되고, 다음 반복으로 넘어가 i는 6이된다.
- 만약 if~continue 전에 명령문이 있다면 그 명령문은 실행된다.
-
6부터 다시 1씩 증가하며 10이 되었을떄 stop!
for (int i = 0; i < 10; i++) {
if (i == 5)
continue;
System.out.println(i);
}
5) for응용1(중첩)
for를 2번 사용하여 00부터 99까지 출력해보자.
for (int i = 0; i <= 9; i++) {
for (int j = 0; j <=9; j++) {
System.out.printf("%d%d\n",i,j); # printf 사용방법
System.out.println(i + '' + j); # printf 사용방법
}
}
6) for응용2(배열)
반복문과 배열을 아주 밀접한 관계를 가지고 있다. 다음 두가지 방법을 통해 알아보자.
한 반의 학생들을 대상으로 상담을 진행할 때 다음과 같이 진행된다.
-
1반 학생들을 번호순으로 정렬해서 줄을 세운다.
-
상담받은 학생의 숫자를 기록한다.
-
대기중인 학생과 상담을 한다.
-
상담받은 학생의 수를 1 증가시킨다.
-
총원보다 상담받은 학생의 수가 작다면 3번 절차로 돌아간다.
-
총원과 상담받은 학생의 수가 같다면 상담을 종료하고 업무를 계속한다.
a. index 활용
String[] members = { "최진혁", "최유빈", "한이람" };
for (int i = 0; i < members.length; i++) {
String member = members[i];
System.out.println(member + "이 상담을 받았습니다")
}
b. for-each 활용
for문에서 배열 탐색을 위해 만들어진 문법이다. 이를 통해 더욱 간결하게 코드를 작성할 수 있다.
-
for (String e : members)
-
member배열 안의 값을 문자열 e에 담아서 각 반복마다 사용할 수 있다.
-
장점 : 배열의 모든 값을 다 탐색할 수 있다.
-
단점 : 특정 값을 pass하기 어렵다.(index로 하면 특정 예외 조건 처리가 편함)
public static void main(String[] args) {
String[] members = { "최진혁", "최유빈", "한이람" };
for (String e : members) {
System.out.println(e + "이 상담을 받았습니다");
c. 참고(파이썬)
파이썬의 경우는 for문을 어떻게 활용할까?
나의 경우에는 3가지 방법으로 분류한다.
1,2번은 위의 방법과 같은 개념이다.
3번 방법의 경우는 range를 사용해 그 크기 만큼 0에서부터 만들어주는건데, 자바에서도 이런 문법이 있지 않을까?
-
- for(i=1, 10, 1)
-
- for i in (배열)
-
- for i in range(10)
댓글남기기