취업 준비를 하며 복습한다는 마음으로, 이것을 보는 누군가에게 도움이 되었으면 하는 마음으로
Java-Tutoral을 작성해 봅니다. 입문서와 순서가 잘못되었을 수 있고, 제가 아는 정보가 틀렸을 수 있습니다.
이 글에 대한 잘못된 정보나, 오탈자 등 수정해야 할 항목 혹은 추가해야 할 항목은 댓글로 알려주시면 감사하겠습니다.
이 자료가 올라가는 저장소 :
https://github.com/hwk0911/Java-tutorial
개인적인 생각으로 제어문은 프로그래밍의 꽃이라 생각한다. (+ 포인터)
이번 포스팅은 Java의 제어문을 알아보려 한다.
Part 1, Part 2 로 나누어 조건문, 반복문으로 진행하려 한다.
이번 포스팅부터는 진행 한 항목의 내용에 맞는 문제를 Beakjoon Online Judge(BOJ) 에서 찾아 같이 포스팅하려한다.
(문제 + 해설)
제어문은 프로그래밍의 논리의 기본이라 생각한다. 모든 자료구조, 알고리즘에 반드시 포함된다.
많은 내용이 중요하지만, 특히 중요한 파트라 생각된다.
모든 제어문이 마찬가지지만, true 와 false 를 통하여 프로그래밍의 진행 방향을 정해준다.
위 사진과 비슷한 느낌을 갖는다. 기차는 기본적으로 한 방향으로 진행하는데, 선로 변경을 통하여
도착할 목적지를 변경하는것 과 같다.
다시 말하지만, 조건문은 프로그래밍의 앞으로의 진로를 변경해 주는 문법이다.
if는 단순 번역으로 만약 혹은 만일 ... 이라면 으로 해석이 가능하다.
프로그래밍에서의 if는 만일 ... 이라면 으로 해석하는것이 더 맞다.
가장 기본적인 조건문이자, 가장 많이 쓰이는 문법 중 하나인 if에 대해 알아보자.
if문의 방식은 간단하게 위의 다이어그램으로 나타낼 수 있다.
조건문의 내용이 true, false 에 따라 특정 실행문을 실행하는 방식이다.
코드로 한번 살펴보자.
public class Main {
public static void main(String[] args) {
boolean condition = true;
if(condition){
System.out.println("condition = " + condition);
}
System.out.println("condition = " + condition);
}
}
/*
결과 :
condition = true
condition = true
Process finished with exit code 0
*/
condition이라는 이름으로, boolean 변수를 선언하여 true 값으로 초기화 해 선언했다.
if (조건문) {
실행문
}
의 기본 구조를 갖는데, 이 때 조건문이 true 일 경우 실행문이 실행된다.
이 때 false인 경우 실행문을 실행하고 싶다면, ! 를 통하여 값을 반전시켜주면 된다.
public class Main {
public static void main(String[] args) {
boolean condition = true;
if(!condition){
System.out.println("condition = " + condition);
}
System.out.println("condition = " + condition);
}
}
/*
결과 :
condition = true
Process finished with exit code 0
*/
결과가 한 줄만 출력된 것을 볼 수 있다. 조건문이 not true = false 이므로 if 내부의 실행문이 무시된 채
그 다음 실행문을 실행한 결과다.
하지만 우리는 한가지의 조건으로 프로그래밍 할 순 없다.
if 의 조건문이 아닌 경우에 이 경우도 필요하다 싶을 때, else or else if를 사용하면 된다.
다음 코드를 보자.
public class Main {
public static void main(String[] args) {
String str = "Hello";
if(str.equals("hello")){
System.out.println("hello");
}
else if(str.equals("hi")){
System.out.println("hi");
}
else{
System.out.println("Hello");
}
}
}
/*
결과 :
Hello
Process finished with exit code 0
*/
Java의 자료형 포스팅에 String의 비교는 equals로 해야한다 설명했다.
추가로 null이 들어올 경우가 있는 변수는 비교의 대상으로 선언해준다.
ex ) str.equals(null)
위에서 프로그래밍의 if는 만일 ... 이라면 으로 해석하는것이 더 맞다 설명했다.
그것에 맞춰 위의 코드를 해석해보면 다음과 같다.
위의 내용을 범용적으로 간단하게 표현해보면 다음과 같다.
세상에.. 내가 생각해도 정말 비유를 잘 했다. 개인적으로 프로그래밍 할때 저런식으로 생각하면서 짠다 ㅋㅋㅋ
if의 조건문은 true or false로 나타낼 수 있으면, 무엇이든 사용가능하다.
하지만 생각해야 할 조건이 많다면, 각 항목마다 새로운 실행문이 필요할 때 else if를 여러 줄 선언하기에는 너무
비효율적이다. 그래서 우리는 switch case를 사용해야 한다.
스위치 혹은 스위치 케이스문으로 불린다.
일단 if와 switch의 코드를 비교해보자.
public class Main {
public static void main(String[] args) {
int condition = 5;
//if
if(condition == 1){
System.out.println(1);
}
else if(condition == 2){
System.out.println(2);
}
else if(condition == 3){
System.out.println(3);
}
else if(condition == 4){
System.out.println(4);
}
else if(condition == 5){
System.out.println(5);
}
else{
System.out.println("Over Value");
}
//switch case
switch (condition){
case 1:
System.out.println(1);
break;
case 2 :
System.out.println(2);
break;
case 3 :
System.out.println(3);
break;
case 4 :
System.out.println(4);
break;
case 5 :
System.out.println(5);
break;
default:
System.out.println("Over Value");
}
}
}
/*
결과 :
5
5
Process finished with exit code 0
*/
코드의 길이를 보면 비슷해보이지만, switch case는 특정 케이스에 대해 분류하는데 특화된 조건문을
표현하고 싶었다. 알아줬으면 좋겠다...
switch case의 기본적인 구조를 살펴보자.
switch case문의 기본 구조다.[ case (비교 대상) : ] 에서 비교 대상과 일치할 때 실행문을 실행한다.
switch case의 구조를 보면, 실행문의 뒤에 break; 가 붙는것을 볼 수 있다.
이것은 switch case의 특징 중 하나인데, break; 가 없다면, 일치하는 시점부터 마지막 default 까지
모든 실행문을 실행한다.
public class Main {
public static void main(String[] args) {
int condition = 1;
switch (condition){
case 1 :
System.out.println(1);
case 2 :
System.out.println(2);
case 3 :
System.out.println(3);
case 4 :
System.out.println(4);
case 5 :
System.out.println(5);
default:
System.out.println("Over Value");
}
}
}
/*
결과 :
1
2
3
4
5
Over Value
Process finished with exit code 0
*/
상황에 따라 break;를 사용할지, 사용하지 않을지 생각하여 프로그래밍 하도록 하자.
때로는 버그의 주 원인이 될 수 있고, 때로는 효율적인 프로그래밍의 시작이 될 수 있다.
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 34905 | 19836 | 18183 | 58.078% |
연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때 이다.
예를들어, 2012년은 4의 배수라서 윤년이지만, 1900년은 4의 배수이지만, 100의 배수이기 때문에 윤년이 아니다.
하지만, 2000년은 400의 배수이기 때문에 윤년이다.
첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.
첫째 줄에 윤년이면 1, 아니면 0을 출력한다.
2000
1
출처 : https://www.acmicpc.net/problem/2753
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Integer A;
Scanner sc = new Scanner(System.in);
A = sc.nextInt();
if(A % 4 == 0 && A % 100 != 0)
System.out.println(1);
else if(A % 400 == 0)
System.out.println(1);
else
System.out.println(0);
}
}
조건 1. 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력
조건 2. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때
코드 분석
개인적으로 조건문을 익히는데 윤년 문제와, 각 월 마다 28일, 29일, 30일, 31일 인지 체크하는 문제가
최고라 생각한다.
+추가
나는 고1 부터 프로그래밍을 시작했다. C언어로 시작했고, 당연히 대학교 입학해서도 나는 코딩을 잘 하는 편에
속했다. 하지만 군 전역 후 개발자에 대한 꿈이 접혔다가 같이 개발자를 준비했던 친구의 도움으로
다시 개발자의 길을 걷게 되었다.
입대 부터 전역까지 3년을 프로그래밍을 쉬었더니 아무것도 못하는 상태가 되어있었다.
조건문 이후로는 기억에 아무것도 없었다.
하지만 다시 개발자의 길을 걷고자 돌아온 학교였기때문에, 열심히 해야했다.
선배님 께서 권해주신 알고리즘 스터디에 참여하여 공부를 하였고, 지금 이 포스팅도 내 복습 겸
그 때 받은 가르침을 나처럼 개발자를 희망하는 분들에게도 알려주고 싶어 포스팅을 하고있다.
동아리에서의 실력은 당연히 바닥을 쳤고, 나는 물어보는 입장밖에 안됐다.
이 때 멘탈이 진짜 박살이 났었다. 그래도 1학년 때는 과에서 프로그래밍 하나는 꽉 쥐고 있었고,
복학해도 당연히 나는 상위권을 예상했다.
하지만 매일 공부 시간을 계속 늘렸고, 모르면 물어보기 보단 직접 찾아보는 방법을 선택했다.
내 기억으론 프로그래밍 실력이 가장 많이 늘었던 시기라 생각한다.
멀리 돌아오긴 했지만.. 여기서 하고싶은 얘기는 문제를 못 풀었다 해서 너무 좌절하지 않았으면 한다.
아니, 좌절하고, 그것 때문에 멈추지 않았으면 좋겠다.
"나를 죽이지 못한 모든 시련은 나를 한층 더 강하게 만든다. 살아있는 한, 나는 점점 더 강해질 것이다."
- 니체
4. 객체지향 프로그래밍의 시작 "클래스" (Java 클래스) (0) | 2020.02.26 |
---|---|
3. 프로그래밍의 꽃 Java 제어문 Part 2 (반복문) (0) | 2020.02.19 |
2. 자료형 보다 기본! Java의 연산자 (0) | 2020.02.19 |
1.5 자료형의 범위는 왜 음수가 더 넓을까? (byte : -128 ~ 127) (0) | 2020.02.19 |
1. 프로그래밍의 시작 Java의 자료형 (기본형, 참조형) (0) | 2020.02.19 |