지난번엔 모르는 것만 뽑아서 썼는데 이번에는 제대로 정리해보고자 좀 더 꼼꼼히 작성해봐야지. 본격 실습을 시작하기도 했으니 예제랑 같이.
자바의 제어문은 조건문과 반복문으로, 2종류이다.
if ( 조건식 ) {
실행문;
실행문;
.
.
.
}
if ( 조건식 ) {
실행문;
} else {
실행문;
}
if ( 조건식 ) {
실행문;
} else if ( 조건식 ) {
실행문;
} else if ( 조건식 ) {
실행문;
} else {
실행문;
}
if-else if-else문을 이용하면 랜덤으로 주사위 번호 하나를 뽑거나 로또 번호를 뽑는(!) 조건식을 만들어볼 수 있다.
public class IfDice { public static void main(String[] args) { int num = (int)(Math.random()*6) + 1; // 0 <= Math.random() < 1 if(num==1) { System.out.println("1번이 나왔습니다"); } else if(num==2) { System.out.println("2번이 나왔습니다"); } else if(num==3) { System.out.println("3번이 나왔습니다"); } else if(num==4) { System.out.println("4번이 나왔습니다"); } else if(num==5) { System.out.println("5번이 나왔습니다"); } else { System.out.println("6번이 나왔습니다"); } } }
정수 숫자 랜덤으로 1개 뽑기 메소드
👉 (int) Math.random()*숫자 + 1
if ( 조건식 ) {
if ( 조건식 ) {
실행문;
} else {
실행문;
}
} else {
실행문;
}
switch(변수) {
case 값1: 실행문1; break;
case 값2: 실행문2; break;
case 값3: 실행문3; break;
default: 실행문4; break; // default는 없어도 상관없음
}
for( 초기화식; 조건식; 증감식) {
실행문;
}
for문도 중첩하여 사용할 수 있다!
public class ForNestedExample { public static void main(String[] args) { for (int i=1; i<=5; i++) { for (int j=1; j<=5; j++) { System.out.println("i="+i+", j="+j+": nested for loops"); } } } }
while(조건식) {
실행문;
}
while문도 중첩하여 사용할 수 있다!
public class WhileNestedExample { public static void main(String[] args) { int i = 1; while (i<=5) { int j = 1; while (j<=5) { System.out.println("i="+i+", j="+j+": nested while"); j++; } i++; } } }
do {
실행문;
} while (조건식);
do-while문을 이용한 예제
import java.util.Scanner; public class DoWhileExample { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int sum = 0; int n; do { String input = sc.nextLine(); n = Integer.parseInt(input); sum += n; } while (n != 0); System.out.println(sum); } }
키보드 입력값의 키 코드를 받아주는 메소드
👉 System.in.read()import 등을 자동으로 처리해 주는 단축키
👉 shift + ctrl + o
반복문과 break문을 이용한 예제
public class BreakExample { public static void main(String[] args) { int sum = 0; int i; for (i=1;;i++) { // while (true) = for (;;) sum += i; if (sum>=100) break; } System.out.println("Sum: " + sum + ", i: " + i); } }
중첩된 반복문과 break문을 이용한 예제
public class BreakExample2 { public static void main(String[] args) { Outter: for (int i=0; i<10; i++) { for (int j=0; j<10; j++) { System.out.println("i: " + i + ", j: " + j); if (j==3) break Outter; } } } }
for문과 continue문을 이용한 예제
public class ContinueExample { public static void main(String[] args) { // 1 - 100 중 3의 배수가 아닌 수의 합 int sum = 0; for (int i=1; i<=100; i++) { if (i%3==0) continue; // 증감식으로 바로 이동, 3의 배수 건너뛰기 sum += i; } System.out.println(sum); } }
자바의 데이터 타입은 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어진다. 참조 타입 중에서는 대표적으로 string 타입이 많이 쓰이는 타입 중 하나이다.
그래서 참조 타입이란?
👉 객체의 번지를 참조하는 타입(= C언어의 pointer)으로 배열, 열거, 클래스, 인터페이스 타입!
👉 참조 타입 변수가 힙 영역의 객체를 참조하지 않는다는 뜻
NullPointerException이 발생하는 예시
public class NullExample { public static void main(String[] args) { String str = null; System.out.println(str.toString()); } }
뭔가 본격적으로 자바 세계로 들어가는 느낌이 들었다. 첫 시간보다는 코드 쳐보는 일이 늘어나서 그런지 갈팡질팡하는 마음도 조금 줄어들었다. 코드 치는 게 세상 제일 재미난다. 참조 타입에 대해 공부하다가 시간이 다 되어서 끊기는 바람에 쬐끔 하다 만 느낌이지만서도 사실 메모리 사용 영역에서 힙 영역이랑 메소드 영역까진 좀 이해를 했는데 스택 영역은 정리하면서 다시 봐도 약간 이해가 안 된다. 강사님도 지금 이해가 완전히 되지 않는다고 해서 조급해하거나 그 다음 것을 이해 못할 거라는 생각은 하지 않아도 된다고 하셨지만 언제쯤 다 이해하고 넘어갈 수 있을지... 아무튼 계속 열심히 하자!