TIL

TIL - 2024/04/25

기석김 2024. 4. 25. 17:21

 

배운 내용 🏃

드디어 꽃인 조건문을 배운다.. 무섭다

조건문을 알아보자

 

Java 프로그래밍에서 특정 조건에 따라 다른 연산을 수행하고싶을때 조건문을 한다.

또는, 특정 조건에 따라 반복해서 동일한 연산을 수행하고 싶을때 반복문을 사용한다.

 

조건문❓ : “물이 끓으면 강불에서 약불로 줄여주세요.”

“물이 끓으면”이 조건이 만족하면 “약불로 줄이는” 연산을 수행하는 조건문 입니다.

 

반복문🔁 : “하얗게 색이 변하기 전까지 계속 저어주세요.”

“하얗게 색이 변하기 전” 조건이 만족할 동안 “저어주세요” 연산을 반복하는 반복문 입니다.

 

만약에 ❓ : 조건문 - if, switch

if 문

if (조건) 이란 ? 

특정 조건에 따라 다른 연산을 수행하고 싶을때 사용하는 문맥

기본적인 조건에 따른 연산을 수행하기 위해 if(조건) { 연산 } 형태로 사용

  if 의 소괄호() 안의 조건이 boolean 값 true 를 만족하면 중괄호 {} 안의 연산을 수행

 

짧게 코드로 한번 알아보자.

// 조건문
boolean flag = true;

if (flag) {
	System.out.println("flag 값은 true 입니다."); // flag 값은 true 입니다. 출력
}

if(조건)-else 이란?

if문 조건이 거짓일 경우에 따른 연산을 수행하기 위해 else { 연산 } 형태로 사용

• if 의 소괄호() 안의 조건이 boolean 값 false 를 만족하면 else 의 중괄호 {} 안의 연산을 수행

 

 짧게 코드로 보자

// 조건문 with else
boolean flag = false;

if (flag) {
	System.out.println("flag 값은 true 입니다."); // 미출력
} else {
	System.out.println("flag 값은 false 입니다."); // flag 값은 false 입니다. 출력
}

if(조건)-else if(조건) 알아보자

• if문 조건이 거짓일 경우에 다시한번 다른조건으로 체크해서 참일 경우에 연산을 수행하기 위해 else if(조건) { 연산 } 형태로 사용

• else if 의 소괄호() 안의 조건이 boolean 값 true 를 만족하면 else if 의 중괄호 {} 안의 연산을 수행

 

코드

// 조건문 with else if
int number = 2;

if (number == 1) {
	System.out.println("number 값은 1 입니다."); // 미출력
} else if (number == 2) {
	System.out.println("number 값은 2 입니다."); // number 값은 2 입니다. 출력
} else {
	System.out.println("number 값은 모르는 값입니다."); // 미출력
}

 

중첩 if(조건) !

• if 문 에 else , else if 로 해결할 수 없는 복잡한 조건이 있을 수 있다

• 이럴때 중첩해서 if 문 또는 else if문 또는 else 문 안에 if 문 을 넣을 수 있다

// 중첩 조건문
boolean flag = true;
int number = 2;

if (flag) {
	if (number == 1) {
		System.out.println("flag 값은 true, number 값은 1 입니다."); // 미출력
	} else if (number == 2) {
		System.out.println("flag 값은 true, number 값은 2 입니다."); // flag 값은 true, number 값은 2 입니다. 출력
	}
} else {
	if (number == 1) {
		System.out.println("flag 값은 false, number 값은 1 입니다."); // 미출력
	} else if (number == 2) {
		System.out.println("flag 값은 false, number 값은 2 입니다."); // 미출력
	}
}

 

중첩 if 문 활용 - 가위바위보의 승자를 알려주는 프로그램 만들어 보기

 

입력 : 첫번째 입력  A유저가 낸 가위바위보 / 두번째 입력 B유저가 낸 가위바위보

출력 : 누가 이겼는지 출력

// 조건문으로 가위바위보 만들기

import java.util.Objects;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        
		System.out.print("A 입력 : ");
		String aHand = sc.nextLine(); // A 입력
        
		System.out.print("B 입력 : ");
		String bHand = sc.nextLine(); // B 입력
        
		if (Objects.equals(aHand, "가위")) { // 값을 비교하는 Obects.equals() 메서드 사용
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 와 B 는 비겼습니다."); // A 와 B 의 입력값을 비교해서 결과 출력
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 가 이겼습니다.");
			} else {
				System.out.println(" B 유저 값을 잘못 입력하셨습니다.");
			}
		} else if (Objects.equals(aHand, "바위")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 와 B 는 비겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("B 가 이겼습니다.");
			}
		} else if (Objects.equals(aHand, "보")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 와 B 는 비겼습니다.");
			}
		}
	}
}
// 입/출력 예시
// A 입력 : 가위
// B 입력 : 보
// A 가 이겼습니다.

 

switch(피연산자) / case(조건)이란 ?

  switch 문은 case 문과 함께 사용하며 if문 보다 좀더 가독성이 좋은 조건문 표현식이다

  switch(피연산자) { case(조건): (연산) } 이러한 형태로 많이 쓰이며,

   switch 피연산자 가 case 조건 을 만족하면 case: 뒤에 명시되어 있는 연산을 수행한다

  case(조건): (연산) 은 여러개를 설정이 가능하다

  각 case 의 연산문 마지막에는 break; 를 꼭 넣어줘야 한다

  break;이 뭐냐 !? - break; 문은 해당 case의 연산문이 끝났다는것을 알려주어 switch 문을 종료 시킨다

  만약 break;를 안쓴다면 ? - case 의 연산문이 안끝났기 때문에 블럭이 끝날때까지 실행된다

 

예시코드

// switch/case 문
int month = 8;
String monthString = "";

switch (month) {
	case 1: monthString = "1월";
		break;
	case 2: monthString = "2월";
		break;
	case 3: monthString = "3월";
		break;
	case 4: monthString = "4월";
		break;
	case 5: monthString = "5월";
		break;
	case 6: monthString = "6월";
		break;
	case 7: monthString = "7월";
		break;
	case 8: monthString = "8월";
		break;
	case 9: monthString = "9월";
		break;
	case 10: monthString = "10월";
		break;
	case 11: monthString = "11월";
		break;
	case 12: monthString = "12월";
		break;
	default: monthString = "알수 없음";
}
System.out.println(monthString); // 8월 출력

 

 

스프링 부트는 무엇인가?

스프링 부트를 사용하면 "바로 실행"할 수있는 스탠드얼론 프로덕션급 스프링 기반 애를리케이션을 쉽게 만들 수 있다

 

spring-boot-staterparent 의존성은 스프링 부트-기반 애플리케이션에 대한 의존성 및 플러그인 관리를 제공하는 부모 POM이다.

 

spring-boot-dependencies는 스프링 부트가 사용하는 모든 의존성에 대한 기본 의존성 관리를 제공한다

 

의존성의 특정 버전을 덮어쓰려면 애플리케이션의 pom.xml 파이레 적절한 이름을 가진 등록정보를 제공해야한다.

여러 버전의 프레임워크 간 호환성은 개발자가 직면하고 있는 주요 문제중 하나다.

스프링의 특정 버전과 호환되는 최신 스프링 세션 버전은 어떻게 찾을까? 답은 문서를 읽는 것이다.

그러나 스프링 부트를 사용하면 spring-boot-staterparent의 해당 특정 버전의 사용하기 위해 애플리케이션을 업그레이드하면 모든 의존성이 새 스프링 버전과호환되는 버전으로 업그레이드하게 된다.

스프링 부트의 오해

스프링 부트는 코드 생성 프레임워크가 아니기 때문에 코드를 생성하지 않는다

스프링 부트 애플리케이션 서버, 웹 서버도 아니다. 다양한 애플리케이션 및 웹 서버의 통합을 제공한다

스프링 부트는 특정 프레임워크나 스펙을 구현하지 않는다

 

스프링 자동 설정

설명
basicErrorController, hanlderExceptionResolver 기본 예외 처리다. 예외가 발생할 때 기본 에러 페이지를 표시한다
beanNameHandlerMapping 핸들러(컨트롤러)에 대한 경로를 확인하는 데 사용하면 된다
carcterEncodingFilter 기본 문자 인코딩 UTF-8을 제공한다
dispacherSerlvet DispacherServlet은 스프링 MVC 애플리케이션의 프런트 컨트롤러이다
jacksonObjectMapper 객체를 XML 또는 JSON으로 또 그 반대로 변환하는 기본 메시지 컨버터다
mutipartResolver 웹 애플리케이션의 파일 업로드 지원을 제공한다
mvcValidator HTTP 요청의 검증을 지원한다
viewResolver 논리적 뷰 이름을 물리적 뷰로 해석한다
restTemplateBuilder REST 서비스를 호출하는 데 사용한다

 

 

마무리 🔥

조건문 if문에 대해 공부했다 if문은 자주 쓰니 잘 이해 해야 겠다