오늘은 if 조건문에 대한 내용과 그 내용을 기초로 페어분과 같이 코드스테이츠에서 제공하는 문제들을 풀었다. 푸는 과정에 있어서 pseudocode
라는 것을 알게 되었다. pseudo
란 '가짜의 ' 라는 뜻을 가지고 있는데 한국말로는 '의사코드' (비교할 의, 비슷할 사)라고도 부른다. 코드를 작성하기 전에 나의 언어로 논리를 기술 해보는 것이다. 코딩 문제를 풀거나 할 때 도움이 많이 되고 오히려 어떨 때는 주석의 역할도 해서 좋다.
If 문의 기본 형식
If 문 즉 조건문은 어떠한 조건이 참일 때 어떤 것을 실행할지 컴퓨터에게 알려준다.
public class Main {
public static void main(String[] args) {
// 나이가 18세를 초과하면 입장 불가라고 알려주는 프로그램이라 가정해보자.
int age = 20; // 입력 받은 나이
if (age > 18) {
System.out.println("18세를 초과하여 입장이 불가능합니다");
}
}
}
위와 같이 정의할 수 있다. if (조건) { 실행 할 내용 }
매우 간단한 문법이지만 굉장히 많이 쓰이고 어떻게 쓰냐에 따라 많이 달라진다.
오늘 기억에 남는 에러 (배운점)
1. ERROR:: missing return statement
해당 에러는 메소드에 return 값을 명시해주지 않았다는 에러이다. 나는 자바스크립트를 먼저 배웠는데 자바스크립트를 배우면서 클린코드에 대해 이야기 할 때 else, else if 문을 많이 사용하지 말라는 이야기를 많이 들었다. 그래서 이번 자바 문제에서도 else 또는 else if문을 사용하지 않고 하려고 했는데 위와 같은 에러가 났다.
아래는 내가 만난 문제 상황이다. 예시 코드를 하나 새로 만들었다. 해당 메소드는 월요일 ~ 수요일 까지의 매개변수만 받고 받은 요일의 다음 요일을 리턴해주는 메소드를 정의 한다고 가정해보겠다.
public class Main {
public String isNextDay(String day) {
// 처음 나의 생각은 이렇게 생각했다.
if (day == "월요일") return "화요일";
if (day == "화요일") return "수요일";
if (day == "수요일") return "목요일";
}
}
위와 같은 코드를 작성했을 때 ERROR:: missing return statement
라는 오류가 난다. 이유는 isNexDay
메소드는 String
타입의 값을 리턴해주는 메소드라고 위의 public String isNextDay(String day)
라고 정의를 해놨다. 근데 if 문에 없는 값이 들어온다면? return 해줄 값을 명시해주지 않았기 때문에 return statement 가 없다고 나오는 것이다.
아래와 같이 고쳐줄 수 있다.
public class Main {
public String isNextDay(String day) {
// 매개변수 day 값을 약속해서 월 ~ 수요일 까지만 들어온다고 하면
// 월, 화 에 대한 조건문만 처리해주고 나머지는 무조건 수요일이기 때문에
// if문이 아닌 return으로 처리해주면 된다.
if (day == "월요일") return "화요일"; // day가 월요일이면 바로 화요일을 return 하고 메소드가 끝나기 때문에 목요일이 리턴되지 않음
if (day == "화요일") return "수요일";
return "목요일";
}
}
✨그렇다면 왜 else if 문은 이러한 에러가 없을까?
public class Main {
public String isNextDay(String day) {
// 위의 코드를 else if 문으로 바꾼다면 아래와 같다
if (day == "월요일") return "화요일";
else if (day == "화요일") return "수요일";
else return "목요일";
}
}
else
로 인해서 모든 조건에 해당하지 않을 경우 return 하는 값을 else
문으로 정했기 때문에 missing return statement 에러가 일어나지 않는 것이다.
2. switch문 안에 case 는 반드시 상수가 들어가야 한다 (변수 X)ERROR:: constant expression required
의 에러가 나왔다면 상수가 요구되는 상황에 변수를 사용한 경우이다.
예시를 하나 들자면 아래 코드는 삼각형 3개의 변을 각각 매개변수로 받아 가장 이 삼각형이 직각 삼각형인지 판별하는 메소드이다.
public class Main {
public boolean isPythagorean(int side1, int side2, int side3) {
// 1. 세 변수 중에 가장 큰값 찾기
int max;
max = Math.max(side1, side2);
max = Math.max(max, side3);
// max 값이 side1, side2, side3 중에 어떤 것인지 찾고자 할 때
switch (max) {
case side1: return side1의 제곱 == side2의 제곱 + side3의 제곱;
case side2: return side2의 제곱 == side1의 제곱 + side3의 제곱;
case side3: return side3의 제곱 == side1의 제곱 + side2의 제곱;
// 이런 식으로 코드를 작성했었다.
}
}
위와 같이 작성하면 case
에 매개변수 side1 ~ 3
을 넣었기 때문에 에러가 발생한다. 변하지 않는 수, 상수를 넣어야 하기 때문에 if문
을 사용해서 완성했다.
오늘의 한줄평
점점 코드 문제가 복잡해져간다. 문제를 푸는 맛이 있고 나의 생각대로 흘러가지 않는 부분에서 페어분이랑 이런 저런 의견을 나누고 검색을 해보며 더욱 자세히 알게된다. 이미 알고 있다 생각했던 부분도 정확히 모르고 있던 부분도 많았던 것 같다. 이렇게 하나씩 기록에 다시 남기면서 복습을 하면 모든 것이 나의 자산으로 되어 있을 것이다. 앞으로가 기대된다.
'개발일지' 카테고리의 다른 글
[TIL] Java 객체지향프로그래밍 - 생성자와 생성자 오버로딩 (0) | 2023.03.01 |
---|---|
[TIL] JAVA 기초 - 반복문 (0) | 2023.02.22 |
[TIL] Java 변수, 데이터 타입, 문자열 (0) | 2023.02.18 |
[TIL] Git, GitHub 기초 (1) | 2023.02.17 |
[TIL] 리눅스 CLI 기본 명령어 (feat. Ubuntu, WSL) (0) | 2023.02.16 |