18 minute read

Untitled

시작일 : 2023년 5월 6일

종료일: 2023년 5월 14일

01. 자바 프로그래밍 시작하기

✔️ 프로그래밍 이란?

  • 프로그래밍: 컴퓨터가 일을 수행 하도록 프로그래밍 언어로 명령어 집합(프로그램)을 만드는 일
  • 컴파일 : 프로그래밍 언어를 컴퓨터가 실행 가는한 기계어로 만드는 일
  • 컴파일러 : 기계어로 바꾸어 주는 프로그램 ( ex. 자바 컴파일러, gcc )

✔️ 자바 프로그래밍

  • 자바의 역사 : 1991년 제임스 고슬링을 비롯한 선 마이크로 시스템스 연구원들이 처음 개발 가전, 휴대용 장치에 사용되는 소프트웨어 언어로 개발됨. 안정성이 중요
  • 자바 프로그래밍의 특징
    • 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다. Untitled
    • 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다.
    • 프로그램이 안정적이다.
    • 풍부한 기능이 제공되는 오픈 소스이다.

✔️ 객체 지향 프로그래밍이 무엇인가?

  • 프로그램의 구현을 시간의 흐름순이 아닌 객체간의 관계와 협력을 기반으로 프로그램 하는 것
  • Object oriented programming(OOP) 이라고 함 ( cf. 절차 지향 프로그래밍 procedural programming )
  • 사용 하는 언어 : Java, C++, C#, Python, JavaScript, Ruby 등 다수

✔️ 자바로 프로그래밍을 하면 좋은 이유는 뭔가요? (객체 지향 프로그래밍의 장점)

Untitled

✔️ 자바를 활용한 프로그래밍

  • 웹 서버 구현
  • 안드로이드 프로그래밍
  • 게임 프로그래밍

✔️ 이 과정에서 배워야 할 내용

  • 자바 언어 익히기 (문법)
  • 객체 지향 프로그래밍 개념을 익히고 자바로 구현하기
  • 자료 구조의 필요성을 이해하고 구현하기
  • 자바 언어의 정확한 이해를 통한 문제 해결하기(객체지향, 알고리즘 문제 등)

✔️ 용어 정리

JDK(Java Development Kit) : 자바에서 제공되는 개발용 라이브러리. 계속 버젼이 올라가고 있음 JRE(Java Runtime Environment) : 자바 프로그램이 실행되는 환경. 8.0까지 무료로 제공 됨 JVM(Java Virtual Machine) : 자바 가상 머신으로 프로그램이 실행되는 환경인 JRE 가 설치되어 있어야 함

✔️

✔️ 컴퓨터에서 자료 표현식

✔️ 비트로 나타낼 수 있는 수의 범위는?

한 개의 비트로 나타낼 수 있는 수 : 0. 1 (2개) 두 개의 비트로 나타낼 수 있는 수 : 00, 01, 10, 11 (4개) 세 개의 비트로 나타낼 수 있는 수 : 000, 001, 010, 011, 100, 101, 110, 111 (8개)

✔️ 2진수, 8진수, 16진수를 프로그램에서 사용하는 예제

public class BinaryTest {

	public static void main(String[] args) {

		int num = 10;
		//10 진수
		int bNum = 0B1010;
		//2진수
		int oNum = 012;
		// 8진수
		int xNum = 0XA;
		//16진수

		//2진수,8진수,16진수 앞에식별자를 작성해야한다.

		System.out.println(num);
		System.out.println(bNum);
		System.out.println(oNum);
		System.out.println(xNum);
	}
}

0과 1로만 데이터를 저장한다. bit(1비트) : 컴퓨터가 표현하는 데이터의 최소 단위로 2진수 하나의 값을 저장할 수 있는 메모리의 크기 byte(바이트) : 1byte = 8bit



02. 변수(Variable)는 변하는 수입니다.

✔️ 변수는 언제 쓰나요?

  • 프로그램에서는 항상 변하는 값을 나타낼 필요가 있음 ( ex. 학생의 성적, 합계, 게임의 레벨, 회원 주소 등등…)
  • 표현하려는 수에 맞는 데이타 타입(자료형)을 이용하여 변수를 선언
  • 표현하려는 자료가 숫자, 문자, 문자열등 다양할 수 있으므로 그에 맞는 자료형을 사용

✔️ 변수 선언과 사용하기 예제

변수 선언은 자료형과 변수 명으로 선언함 선언과 동시에 초기화 할 수 있음

package ch05;

public class VariableTest {

	public static void main(String[] args) {
		int age, count;
		age = 10;

		int level = 10000;
		System.out.println(age);
		System.out.println(level);
	}
}

✔️ 변수의 이름 만들 때…

변수 이름은 영문자(대문자, 소문자)나 숫자를 사용할 수도 있고, 특수문자 중에는 $와 _만 사용 (ex. count100, _master)

변수 이름의 시작은 숫자로 할 수 없음 ( ex. 27days(X), 1abc(X))

자바에서 이미 사용하고 있는 예약어는 사용할 수 없음 (while, break 등)

변수 이름은 프로그램내에서 사용되는 것이므로 그 용도에 맞고 가독성이 좋게 만드는것이 중요 ex) int numberOfStudent;



03. 자료형(data type) - 정수는 어떻게 표현하나요?

✔️ 변수와 메모리

변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당 변수는 할당된 메모리를 가리키는 이름

int level = 10; // 4바이트 정수형 메모리가 level 이라는 이름으로 할당 됨

✔️ 기본 자료형(primitive data type)의 종류

Untitled

✔️ 정수 자료형의 종류와 크기

Untitled

✔️ byte와 short

  • byte : 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용
  • short: 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용

✔️ int

  • 자바에서 사용하는 정수에 대한 기본 자료 형
  • 4바이트 단위의 자료형
  • 프로그램에서 사용하는 모든 숫자(리터럴)은 int 로 저장됨
  • 32 비트를 초과하는 숫자는 long 자료형으로 처리

✔️ long

  • 8바이트 자료형
  • 숫자의 뒤에 알파벳 L 또는 l 을 써서 long 형임을 표시 함
  • 예) int num = 12345678900; // 오류 long lnum = 12345678900; //오류 long lnumber = 12345678900L; // ok

Untitled

✔️ 형 변환 예제

package ch06;

public class ch06 {

	public static void main(String[] args) {

		byte bnum = 127;

		System.out.println(bnum);

//		int num 12345678900;
		long lNum = 12345678900L;
		System.out.println(lNum);
	}
}

int에서 long 타입으로 형 변환 4바이트에서 8바이트로 형 변환은 가능

하지만 8 바이트에서 4바이트로 변환이 불가능하기 때문에 변수 앞에 long을 붙이고 숫자 뒤에 L도는 l을 붙여 형 변환을 시켜준다.

04. 자료형(data type) - 실수는 어떻게 표현하나요?

✔️ 부동 소수점 방식

  • 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함
  • 부동 소수점 방식으로 실수 값 0.1 표현

Untitled

  • 지수부와 가수부로 표현 함
  • 컴퓨터에서는 밑수를 2로 사용
  • 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현 되는 것
  • 컴퓨터에서는 밑수가 2 이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1임 예) 0.2 표현 0.4 X 2-1 정규화 하면 1.6 X 2-3

✔️ float형과 double형

Untitled

자바에서는 실수의 기본 타입은 dobule을 사용 함

✔️ float 와 double 예제

   package ch07;

   public class DoubleTest {

	   public static void main(String[] args) {
		   double dnum = 3.14;
		   float fnum = 3.14F;

		   System.out.println(dnum);
		   System.out.println(fnum);
	   }
   }

실수는 8 바이트 double 플루트는 4바이트 3.14는 실수로 8바이트로 숫자 뒤에 F를 작성하므로 float 타입으로 변환 저장 해라 라는 뜻으로 사용할 수 있으며, float 매개변수형으로 작성했으나 해당 실수가 피라메터 매칭 타입 오류가 나는 경우에는 뒤에 식별자를 꼭 써야 한다.

✔️ 부동 소수점 방식의 오류

지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다

   public class DoubleTest2 {

	public static void main(String[] args) {

		double dnum = 1;

		for(int i = 0; i<10000; i++) {
			dnum = dnum + 0.1;
		}
		System.out.println(dnum);
	}
}

출력 결과

Untitled



05. 자료형(data type) - 문자는 프로그램에서 어떻게 표현하여 사용하나요?

✔️ 문자도 정수로 표현합니다.

  • 어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의
  • A 는 65

Untitled

  • 문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(charater set)라 함 (ex. ASKII, euc-kr, utf-8, utf-16)

✔️ 자바에서는 문자가 어떻게 표현되나요?

  • 자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용
  • utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)

✔️ 문자형 변수 선언과 사용하기

  • 문자를 위한 데이터 타입 char ch = ‘A’;
  • 내부적으로 숫자료 표현되므로 숫자를 넣어도 문자가 출력될 수 있음 char ch2 = 66;
package ch08;

public class CharacterTest {

	public static void main(String[] args) {

		char ch1 = 'A';
		System.out.println(ch1);
		System.out.println((int)ch1);

		char ch2 = 66;
		System.out.println(ch2);

		int ch3 = 67;
		System.out.println(ch3);
		System.out.println((char)ch3);

		//char ch4 = -66;  음수는 대입 할 수 없음

    		char ch5 = '';
		char ch6 = '\uD55C';

		System.out.println(ch5);
		System.out.println(ch6);
	}
}

char 자료형은 2바이트로 유니코드로 쓰고 내부적으로 정수의 코드값을 가지고 있다. 앞에 -66; 등 음수의 값은 쓸 수 있다.

✔️ 참고

character set: 문자를 숫자로 변환한 값의 세트

encoding: 문자가 숫자로 변환되는 것 decoding: 숫자에서 다시 문자로 변환되는 것

ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트

UNICODE: 전 세계 표준으로 만든 문자 세트

UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음

UTF-16: 2바이트로 문자를 표현



06. 자료형(data type)- 논리형과 자료형 없이 변수 사용하기

✔️ 논리형

  • true(참), false(거짓) 두 가지만 나타냄
  • 1바이트를 사용 함
  • 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지등을 표현
package ch09;

public class BooleanTest {

	public static void main(String[] args) {

		boolean isMarried = true;
		System.out.println(isMarried);
	}
}

✔️ 지역 변수 자료형 없이 사용하기 ( 자바 10 지원 됨 )

  • Local variable type inference
  • 추론 가능한 변수에 대한 자료형을 선언하지 않음
  • 한번 선언하여 추론 된 변수는 다른 타입의 값을 대입 할 수 없음
  • 지역 변수만 사용 가능
 package ch09;

public class LocalVariableType {

	public static void main(String[] args) {

		var i = 10;
		var j = 10.0;
		var str = "hello";

		System.out.println(i);
		System.out.println(j);
		System.out.println(str);

		str = "test";
		//str = 3;
	}
}
str = "hello";
str = 3;
// 문자열을 넣었던 변수를 다시 정수형으로 선언하는 것은 스크립트 언어에서는 가능하지만,
// 자바에서는 불가하다



07. 변하지 않는 상수와 리터럴, 변수의 형 변환

✔️ 상수(constant) 선언하기

  • 상수는 변하지 않는 수
  • 원주률 3.14, 1년 12개월 등
  • final 예약어를 사용하여 선언
  • 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고 혹, 변하더라도 선언한 부분만 변경하면 되므로 여러부분을 수정할 필요가 없음
package ch10;

public class ConstantTest {

	public static void main(String[] args) {

		final int MAX_NUM = 100;
		final int MIN_NUM;

		MIN_NUM = 0;

		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);

		//MAX_NUM = 1000;
	}
}

상수는 변하지 않는 수로 일반적으로 대문자로 선언을 한다.

초깃 값을 세팅해주어야 오류가 나지 않는다. 만약 MIN_NUM 값을 0으로 선언한 부분을 주석 처리 한 후 디버깅 해보면 오류가 날 것 이다.

✔️ 리터럴(literal)

  • 프로그램에서 사용하는 숫자, 문자, 논리값을 뜻함
  • 리터럴은 상수 풀(constant pool)에 있음
  • 정수 리터럴은 int 로 실수 리터럴은 double 로 저장됨 정수의 범위가 넘어가는 경우는 L,l을 float로 사용하려는 경우는 F,f 식별자를 써줘야 함

✔️ 형 변환 (type conversion)

  • 서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 통일하는 것
  • 묵시적 형 변환(implicit type conversion, 자동 형 변환)과 명시적 형 변환(explicit type conversion, 강제 형 변환)이 있음
  • 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어 짐
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로읜 형 변환은 자동으로 이루어 짐

Untitled

package ch10;

public class TypeConversionTest {
	public static void main(String[] args) {


		byte bNum = 10;
		int iNum = bNum;
		//자동 형 변환 가능

		int iNum1 = 20;
		float fNum = iNum2;
		//20이라는 값이 형변환 되어 20.0 된다.

		int iNum = 10;
		byte bNum = (byte)iNum;
		//4바이트에서 1바이트로 변환 (Error)
		//(byte)를 사용하여 표현할 경우 변환은 가능하지만 자료 유실이 일어난다.


		double dNum = 3.14;
		int iNum2 = (int)dNum;
		//마찬가지로 실수 -> 정수 변환으로 자료 유실이 일어난다.
	}

}

✔️ 연산 중 형 변환 예제

package ch10;

public class TypeConversion {

	public static void main(String[] args) {

		double dNum = 1.2;
		float fNum = 0.9F;

		int iNum1 = (int)dNum + (int)fNum;
		int iNum2 = (int)(dNum + fNum);

		System.out.println(iNum1);
		System.out.println(iNum2);
	}

}

iNum1 의 경우 dNum과 fNum 을 정수로 변환 후 더했기 때문에 값은 1이 된다.

iNnm2의 경우 dNum과 fNum 을 더한 후 정수 변환했기 때문에 값은 2가 나오게 된다.



08. 자바의 연산자들 -1 (대입, 부호, 산술, 복합대입, 증감연산자)

✔️ 항과 연산자

  • 항(operand) : 연산에 사용되는 값
  • 연산자 (operator) : 항을 이용하여 연산하는 기호
  • 단항 연산자의 순위가 가장 높다.

✔️ 대입 연산자 (assignment operator)

  • 변수에 다른 변수나 값을 대입하는 연산자
  • 이항 연산자 중 우선 순위가 가장 낮은 연산자들
  • 왼쪽 변수 = 오른쪽 변수(또는 식, 값)

Lvalue 와 Rvalue 가 있다 .

다른 연산자 보다 우선 순위가 상당이 낮다.

✔️ 부호 연산자

  • 단항 연산자
  • 변수의 부호를 유지 하거나(+) 바꿈(-)
  • 실제 변수의 부호가 변하려면 대입 연산자를 사용해야 함

✔️ 산술 연산자

  • 사칙 연산자

Untitled

  • % 나머지 구하는 연산자, 숫자 n 의 나머지 범위는 0 ~ n-1

✔️ 복합 대입 연산자

  • 대입 연산자와 다른 연산자가 함께 쓰임

Untitled

✔️ 증가, 감소 연산자

  • 단항 연산자
  • 변수의 값을 1 더하거나 1 뺄때 사용
  • 연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐
  • 문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함

Untitled

단항 연산자의 순위가 가장 높고, 대입연산자의 순위는 낮다.



09. 자바의 연산자들 -2 (관계, 논리 연산자)

✔️ 관계 연산자

  • 이항 연산자
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함
  • 조건문, 반복문의 조건식으로 많이 사용 됨

Untitled

package ch12;

public class RealtionalTest {

	public static void main(String[] args) {

		int num1 = 5;
		int num2 = 3;

		boolean value = (num1 > num2);
		System.out.println(value);

		System.out.println(num1 < num2);
		System.out.println(num1 >= num2);
		System.out.println(num1 <= num2);
		System.out.println(num1 == num2);
		System.out.println(num1 != num2);
	}
}

Untitled

✔️ 논리 연산자

  • 관계 연산자와 혼합하여 많이 사용 됨
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨

Untitled

package ch12;

public class LogicalTest {

	public static void main(String[] args) {

		int num1 = 10;
		int num2 = 20;

		boolean flag = (num1 > 0) && (num2 > 0);
		System.out.println(flag);

		flag = (num1 < 0) && (num2 > 0);
		System.out.println(flag);

		flag = (num1 > 0) || (num2 > 0);
		System.out.println(flag);

		flag = (num1 < 0) || (num2 > 0);
		System.out.println(flag);

		flag = !(num1 > 0);
		System.out.println(flag);
	}
}

Untitled

✔️ 논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가 (short circuit evaluation)

  • 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
      • 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음
  • 논리 합(   )은 두 항의 결과가 모두 false일 때만 결과가 false
      • 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음
package ch12;

public class ShortCircuit {

	public static void main(String[] args) {

		int num1 = 10;
		int i = 2;

		boolean value = ((num1 = num1 + 10 ) < 10) && ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);

		value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);

	}
}

Untitled



10. 자바의 연산자들 -3 (조건 연산자, 비트 연산자)

✔️ 조건 연산자

  • 삼항 연산자
  • 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨
  • if (조건문)을 간단히 표현할 때 사용 할 수 있음

Untitled

package ch13;

import java.util.Scanner;
//스캐너가 util 라이브러리에 있다.

public class ConditionTest {

	public static void main(String[] args) {

		int max;
		System.out.println("입력 받은 두 수중 큰 수를 출력하세요\n ");

		Scanner scanner = new Scanner(System.in);
		System.out.println("입력1:");
		int x = scanner.nextInt();
		System.out.println("입력2:");
		int y = scanner.nextInt();

		max = (x > y)? x : y);
		System.out.println(max);
	}
}

System.in > 표준 자바 입출력

✔️ 비트 연산자

  • 대입연산자와 다른 연산자가 함께 쓰임
  • 마스크 : 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
  • 비트켜기 : 특정 비트들만을 1로 설정해서 사용하고 싶을 때 예) & 00001111 ( 하위 4비트 중 1인 비트만 꺼내기)
  • 비트끄기 : 특정 비트들만을 0으로 설정해서 사용하고 싶을 때 예) | 11110000 ( 하위 4비트 중 0 인 비트만 0으로 만들기)
  • 비트 토글 : 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때

Untitled

package ch13;

public class BitTest {

	public static void main(String[] args) {

		int num1 = 5;  	// 00000101
		int num2 = 10; 	// 00001010

		System.out.println(num1 | num2);
		System.out.println(num1 & num2);
		System.out.println(num1 ^ num2);
		System.out.println(~num1);

		System.out.println(num1 << 2);
		System.out.println(num1);
		System.out.println(num1 <<= 2);
		System.out.println(num1);

	}
}

Untitled

✔️ 연산자 우선순위

Untitled



11. 조건문 - if 문(만약에… 라면)

✔️ 조건문 이란?

  • 주어진 조건에 따라 다른 실행이 이루어 지도록 구현
  • ‘재산이 1억 이상이면 100만원을 세금으로 낸다 그렇지 않으면 내지 않는다’ 를 구현 한다면
    만약에 (재산이 1 이상이면){
    세금을 100만원 낸다
    }
    그렇지 않으면 {
    세금을 내지 않는다
    }
    
  • if문 문법
    if(조건식){
      수행문;      // 조건식이 '참'인 경우에(조건에 맞는 경우) 수행문이 수행됨
     }             // 조건식이 '참'이 아니면(조건에 맞지 않는 경우) 수행문이 수행되지 않음
    
  • if - else 문 문법
    if( 조건식) {
    
        수행문1;   // 조건식이 '참'인 경우에 수행됨
    }
    else{
        수행문2;    // 조건식이 '참'이 아닌 경우에 수행됨
    }
    
  • if - else 예제
    package ch14;
    
    import java.util.Scanner;
    
    public class IfElseTest {
    
    	public static void main(String[] args) {
    
    		int age = 7;
    
    		//Scanner scanner = new Scanner(System.in);
    		//int age = scanner.nextInt();
    
    		if( age >= 8) {
    			System.out.println("학교에 다닙니다");
    		}
    		else {
    			System.out.println("학교에 다니지 않습니다.");
    		}
    	}
    }
    

✔️ if-else if-else 문

  • 하나의 상황에 대한 조건이 여러개로 나뉘고 각 조건에 다른 수행이 이루어져야 할 경우 사용
  • 각 조건은 상호 배타적임
      if(조건식1){
          수행문1;        // 조건식1이 '참'인 경우 수행하고 전체 조건문을 빠져나감
      }
      else if(조건식2){
          수행문2;        // 조건식2이 '참'인 경우 수행하고 전체 조건문을 빠져나감
      }
      else if(조건식3){
          수행문3;        // 조건식3이 '참'인 경우 수행하고 전체 조건문을 빠져나감
      }
      else{
          수행문4;        // 위 조건이 모두 해당되지 않는 경우 수행됨 (디폴트 조건)
      }
    
      수행문5;            // if-else if-else 문이 끝나면 수행됨
    
      가령 조건식2가 만족되면 수행문2 -> 수행문5  순으로 수행됨
    

    Untitled

package ch15;

public class IfElseIfElseTest {

   public static void main(String[] args) {
   	int age = 12;
   	int charge;

   	if(age < 8){
   		charge = 1000;
   		System.out.println("미 취학 아동입니다.");
   	}
   	else if(age < 14){
   		charge = 2000;
   		System.out.println("초등학생 입니다.");
   	}
   	else if(age < 20){
   		charge = 2500;
   		System.out.println("중, 고등학생 입니다.");
   	}
   	else{
   		charge = 3000;
   		System.out.println("일반인 입니다.");
   	}

   	System.out.println("입장료는 " + charge + "원입니다.");
   }
}

Untitled

✔️ 실습

package java001;
import java.util.Scanner;
public class ch14 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//int age = 12;

	System.out.println("나이를 입력하세요");
int charge = 3000;

Scanner scanner = new Scanner(System.in);
int age= scanner.nextInt();

	if( age < 8) {
		charge = 1000;
	System.out.println("미 취학 아동니다."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  );
	}
	else if (age < 14) {
		charge = 2000;
		System.out.println("초등학생입니다.");
	}
	else if(age < 20 ) {
		charge = 2500;
		System.out.println("중, 고등학생입니다.");
	}
	else {
		System.out.println("일반인입니다.");
	}
//	default
	System.out.println("입장료는" + charge + "입니다.");
}
}

학습한 내용을 바탕으로 scanner 함수를 이용하여 사용자 값을 입력 받고, 그에 맞는 조건을 if, else 문을 통하여 출력 되게 설계했다.

스크린샷 2023-05-12 오후 4.05.36.png

위의 실습 코드를 실행하면 나오는 화면

스크린샷 2023-05-12 오후 4.09.04.png

나이를 입력하면 해당 값을 바탕으로 설계된 구문이 출력된다.

✔️ if-else if 문과 if - if 문의 차이점

  • if- else if 를 사용하는 경우 하나의 조건이 만족 되면 나머지 else if 부분은 수행되지 않음
  • if - if 로 사용하게 되면 각각 다른 조건 문으로 해석되어 각각 수행하게 됨 ( 위 예제를 if 로 모두 바꾸어 봅시다.)
package ch15;

public class IfIfTest {

	public static void main(String[] args) {
		int age = 12;
		int charge;

		if(age < 8){
			charge = 1000;
			System.out.println("미 취학 아동입니다.");
		}
		if(age < 14){
			charge = 2000;
			System.out.println("초등학생 입니다.");
		}
		if(age < 20){
			charge = 2500;
			System.out.println("중, 고등학생 입니다.");
		}
		else{
			charge = 3000;
			System.out.println("일반인 입니다.");
		}

		System.out.println("입장료는 " + charge + "원입니다.");
	}
}

Untitled

if - fi 로 코드를 작성하게 되면 배타적인 체크 보다는 무조건의 성립이 일어나게 된다.

✔️ 하나의 상황에 의해 여러 조건이 필요하다면 if-else문을 사용하게 되는 것이고,

✔️각각의 조건을 따로따로 비교할 목적이라면, if- if 문을 써도 무방하다.



12. 조건이 여러 개 일 때 간단히 표현되는 switch-case 문

switch - case 문

  • if - else if - else 문을 사용할 때 복잡하고 번거로운 부분을 가독성 좋게 구현
  • 비교 조건이 특정 값이나 문자열인 경우 사용
  • break 문을 사용하여 각 조건이 만족되면 switch 블럭을 빠져나오도록 함
  • 자바 14부터 좀 더 간결해진 표현식이 지원 됨 ( break 사용하지 않음 )

✔️ 한 달이 며칠인지 알려주는 프로그램 구현

package ch16;

public class SwitchCaseTest {

	public static void main(String[] args) {

		int month = 10;
		int day;

		switch(month){

			case 1: case 3: case 5: case 7: case 8: case 10: case 12:
				day = 31;
				break;
			case 4: case 6: case 9: case 11:
				day = 30;
				break;
			case 2:
				day = 28;
				break;
			default:
				day = 0;
				System.out.println("존재하지 않는 달 입니다.");

		}
		System.out.println(month + "월은 " + day + "일입니다.");
	}
}

Untitled

✔️ 문자열 지원되는 switch - case 문

package ch16;

public class SwitchCaseTest2 {

	public static void main(String[] args) {
		String medal = "Gold";

		switch(medal) {

			case "Gold":
				System.out.println("금메달 입니다.");
				break;
			case "Silver":
				System.out.println("은메달 입니다.");
				break;
			case "Bronze":
				System.out.println("동메달 입니다.");
				break;
			default:
				System.out.println("메달이 없습니다.");
				break;
		}

	}
}

Untitled

✔️ Java 14 부터 지원 되는 Switch Expression

  • 간단하게 쉼표(,)로 조건 구분
  • 식으로 표현 하여 반환 값을 받을 수 있음. 리턴 값이 없는 경우는 오류가 생김
  • yield 키워드 사용
package ch16;

public class SwitchCaseUpTest {

	public static void main(String[] args) {

		int month = 3;

		int day = switch (month) {
	    	case 1, 3, 5, 7, 8, 10,12 -> {
	    		System.out.println("한 달은 31일입니다.");
	    		yield 31;
	    	}
	    	case 4,6,9,11 -> {
	    		System.out.println("한 달은 30일입니다.");
	    		yield 30;
	    	}
	    	case 2 ->{
	    		System.out.println("한 달은 28일입니다.");
	    		yield 28;
	    	}
	    	default->{
	    		System.out.println("존재하지 않는 달 입니다.");
	    		yield 0;
	    	}
		};
		System.out.println(month + "월은 " + day + "일입니다.");
	}
}

Untitled



13. 반복문 - while문

✔️ 조건이 참(true)인 동안 반복수행하기

  • 주어진 조건에 맞는 동안(true) 지정된 수행문을 반복적으로 수행하는 제어문
  • 조건이 맞지 않으면 반복하던 수행을 멈추게 됨
  • 조건은 주로 반복 횟수나 값의 비교의 결과에 따라 true, false 판단 됨
  • 예) 달리는 자동차, 일정 횟수 만큼 돌아가는 나사못, 특정 온도까지 가동되는 에어컨등

✔️ while문

  • 수행문을 수행하기 전 조건을 체크하고 그 조건의 결과가 true인 동안 반복 수행

Untitled

✔️ while 문 예제

  • 1부터 10까지 더하여 그 결과를 출력해 보자
package java001;

public class ch17 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num = 1;
		int sum = 0;

//		int sum;
//		지역변수는 자동으로 초기화 되지 않는다. 꼭 초기화 해야한다.

		while( num <= 10) {
			sum += num;
			num++;

		}
		System.out.println(sum);
		System.out.println(num);

	}

}

✔️ 무한 반복 할 때

   while(true){

       .......
   }



14. 반복문 - do-while문

✔️ 조건과 상관 없이 한번은 수행문을 수행

  • while문은 조건을 먼저 체크하고 반복 수행이 된다면, do-while은 조건과 상관 없이 수행을 한 번 하고나서 조건을 체크

Untitled

  • 조건이 맞지 않으면(true 가 아니면) 더 이상 수행하지 않음

✔️ do-while 예제

  • 입력받는 모든 숫자의 합을 구하는 예제 단, 입력이 0이 되면 반복을 그만하고 합을 출력
package java001;
import java.util.Scanner;

public class ch18 {

	public static void main(String[]args) {

		Scanner scanner = new Scanner(System.in);
		int input;
//		입력 받을 값의 주머
		int sum = 0;
		//계속 더할 것 이기 때문에 이니셜라이즈를 0으로 설정한다.


		do {
			input = scanner.nextInt();
			sum += 2;
//			입력을 먼저 받는다

		}while (input != 1);

		System.out.println(sum);
	}
}

do 문은 게속 실행이 되고 while문이 참이 되면 수행을 종료한다.



15. 반복문 - for 문

✔️ for문의 수행 순서

Untitled

✔️ for문 예제 (while과 비교)

  • 1부터 10까지 더한 결과를 출력하세요
package ch19;

public class ForTest {

	public static void main(String[] args) {

		int count =1;
		int sum = 0;

		for( int i = 0 ; i<10; i++, count++) {  //10번
			sum += count;
			//count++;
		}
		System.out.println(sum);


		int num = 1;
		int total = 0;

		while( num <= 10) {
			total += num;
			num++;
		}
		System.out.println(total);
	}
}

✔️ 각 반복문은 주로 언제 사용하나요?

Untitled

✔️ for문의 문장들은 생략가능 합니다.

  • 초기화식 생략 : 이미 이전에 값이 초기화 되어 for 내부에서 값을 지정할 필요가 없는 경우

Untitled

  • 조건식 생략 : 반복 수행에 대한 조건이 수행문 내부에 있는 경우

Untitled

  • 증감식 생략 : 증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결과값에 결정되는 경우

Untitled

  • 무한 반복

Untitled

✔️ 참고

i+1  i++ 다릅니다.
i+1 자체는 i 값이 증가되지 않습니다. 증가하기 위해서는 대입연산자를 써야합니다.
하지만 i++ i = i+1, i+=1  동일한 의미입니다.
따라서 값을 1 증가하려고 한다면 i++ 사용하세요



16. 반복문이 여러 번 포개진 중첩 반복문

✔️ 중첩 반복문이란?

  • 반복문 내부에 또 다른 반복문이 있음
  • 여러 겹으로 반복문을 겹쳐서 구현 가능 (단 수행시간에 문제가 발생할 수 있음)
  • 외부 반복문과 내부 반복문 간의 변수 값 변화에 유의 하며 구현하여야 함

✔️ 구구단을 for와 while로 구현해 보자

package ch20;

public class NestedLoopTest {

	public static void main(String[] args) {
		int dan = 2;
		int count = 1;

		for( dan = 2; dan <= 9; dan++) {

			for(count = 1; count <=9; count++) {

				System.out.println( dan + "X" + count + "=" + dan * count);
			}
			System.out.println();
		}

		dan = 2;
		while( dan <= 9 ) {
			count = 1;
			while (count <= 9) {

				System.out.println( dan + "X" + count + "=" + dan * count);
				count++;

			}
			dan++;
			System.out.println();
		}
	}
}

✔️



17. 중간에 멈추는 break문, 무시하고 계속 진행하는 continue문

✔️ break문 사용하기

  • 감싸고 있는 제어문의 블록을 빠져 나오는 기능 (switch문 에서도 사용)
  • 반복문에서는 주로 조건문(if)와 같이 사용하여 조건에 해당되는 경우 반복 수행을 멈추고 반복문 외부로 수행이 이동
  • 여러 반복문이 중첩되어 있는 경우엔 break 문이 포함되어 있는 반복문만 빠져 나옴

✔️ break문 예제

  • 1부터 숫자를 더하여 100이 넘는 순간의 그 숫자와 합을 출력하세요
package ch21;

public class BreakTest {

	public static void main(String[] args) {

		int sum = 0;
		int num;
		for( num = 1; ; num++) {

			sum += num;
			if( sum >= 100)	break;
		}

		System.out.println(sum);
		System.out.println(num);
	}
}

✔️ continue문 사용하기

  • 반복문 내부에서 조건문(if)와 같이 사용하며, 조건이 맞는 경우(true 이면) 이후 반복문 블럭 내부의 다른 수행문들을 수행하지 않음

✔️ continue문 예제

  • 1부터 100까지 숫자 중 3의 배수를 출력하세요

Tags:

Categories:

Updated:

Leave a comment