객지프 - 3주차

02. 자바 기본 프로그래밍


2.1 프로그램의 기능

📖 프로그램의 5대 기능

  1. 입력 : 키보드 ,터치스크린, 마우스, 파일 등으로 부터 입력 데이터를 받음.
    파일과 같이 사용자의 action이 없어도 들어오는 정보가 있으면 그것이 입력 데이터이다.

  2. 출력 : 스크린, 파일, 종이 등으로 데이터를 출력하는 기능

  3. 연산 : 더하기, 빼기, 곱하기, 나누기, 논리 연산 등의 연산 수행

  4. 선택-조건부 수행 : 조건을 판단하여 특정작업을 수행 (if, else)

  5. 반복 : 동일한 작업을 2회 이상 수행

  • 조건부 수행은 조건이 first → 조건이 맞으면 수행
  • 반복은 횟수가 first → 정해진 횟수만큼 수행
  • 프로그램이라면 5가지 기능 중 최소 1개는 포함하고 있다.

ex) Java

  • 입력 : read
  • 출력 : print
  • 연산 : =, +, -, *
  • 선택-조건부 수행 : if else
  • 반복 : for, while, do while

📖 변수와 함수

  1. 변수 : 변수 이름 =(배정 연산자) 변수 값

    • 프로그램을 구성하는 가장 최소 단위
    • 영문 알파벳으로 구성
    • 사용자가 생성하며 특정 값을 넣기 위해 만드는 빈 상자
    • 변수는 하나의 값만 담을 수 있음. 두 변수를 교환하고 싶으면 임시로 변수를 하나 더 만들어야 함

      💡 만일 a의 값과 b의 값을 교환하고 싶다면?

      c = a : a의 값을 c에 넣음 (임시로 c라는 변수를 만듦)
      a = b : b의 값을 a에 넣음
      b = c : c의 값을 b에 넣음
      -> a와 b의 값이 교환되었다.


  1. 함수
    • 동일한 작업을 수행하기 위해 자주 사용하는 기능을 미리 만들어 놓고, 반복적으로 사용할 수 있도록 만든 명령문

📝 변수와 함수 예

현재 현금이 200원 있다.
은행에 예금했을 때 연이자율이 10%일 때의 이자와 연이자율이 20%일 때의 이자는?

  • 함수 = 이자를 구하는 작업
    200원 * 0.1 = 20원
    현금 * 이자율 = 이자

  • 변수
    200원, 10%, 20%, 연이자율이 10%일 때의 이자, 연이자율이 20%일 때의 이자



2.1 자바 프로그램의 구조

1. 클래스 만들기

자바에서는 클래스를 만들고 그 안에 변수, 상수, 함수(메소드) 등 모든 프로그램 요소를 작성한다.

public class Hello {
	...
}
  • class 키워드로 클래스 이름은 선언한다.
  • {} 사이에 변수와 메소드(함수) 코드를 작성한다.
  • 권한생성자(접근 제어자)로 변수와 함수, 클래스에 대한 접근을 제한하는 문법 중 하나이다. 자바는 변수던 함수던 만들 때 모두 권한지정이 필요하다. 아무것도 선언하지 않으면 defualt 권한이 적용된다.
  • 그 중 public은 다른 클래스에서 Hello 클래스를 자유롭게 참조할 수 있다는 선언이다.

2. 주석문

주석문은 개발자가 프로그램에 대한 설명이나 특이 사항 등을 자유롭게 덧붙일 때 사용한다.
자바에는 두 종류의 주석문이 있다.

  • // : 한 라인 주석, 행이 끝날 때 까지 주석으로 처리
  • /* */ : 여러 라인 주석

3. main() 메소드

자바 프로그램은 main() 메소드에서 부터 실행을 시작한다.

public static void main(String[] args) {
	...
}
  • 반드시 public static void로 선언되어야 한다.
  • public은 권한지정, 접근 제어 선언이다.
  • static 선언은 java에게 메모리를 강제로 할당하게 만들어, 메모리 상에서 가비지 컬렉션이 작동하지 않도록 잡아주는 역할을 한다.
  • void 위치는 반환값의 자료형을 나타내는데, main()함수는 반환값이 없기 때문에 void로 표기한다.
  • String[] args로 실행 인자를 전달 받는다.
  • 한 클래스는 두 개 이상의 main()을 가질 수 없다.
  • 실행을 시작할 클래스에만 main()을 작성하기 때문에 모든 클래스가 main()을 가지는 것은 아니다.

4. 메소드

C/C++ 함수를 자바에서는 메소드(method)라 부른다. 작성 방법이나 호출 방법은 C/C++ 함수와 거의 같다. 다만, 반드시 클래스 내에 작성되어야 한다.

 

  • 메소드 sum() 선언
public static int sum(int n, int m) { // 매개변수 n, m
	return n + m; // n과 m의 합 리턴
}

5. 메소드 호출

s = sum(i, 10);
  1. sum() 메소드 호출

  2. sum() 호출 시 변수 i 값과 정수 10 전달

  3. sum()의 매개변수 n, m에 각각 20, 10 값 전달

  4. sum()은 n과 m 값을 더한 30을 리턴

  5. 변수 s에 정수 30이 전달되어 저장


6. 변수 선언

변수란 데이터를 저장하는 공간이며, 변수 타입과 변수 이름을 선언한다.
⭐ 메소드 에서 선언된 변수는 지역 변수로 메소드 실행이 끝나면 저장 공간을 반환한다.

int i = 20; // 변수 타입은 int, 변수 이름은 i, 값 20 저장
char a; // 변수 타입은 char, 변수 이름은 a, 값은 저장되지 않음

7. 문장

자바에서 모든 문장은 C/C++와 동일하게 ;로 끝나야 한다.

int i = 20;
s = sum(i, 20);

8. 화면 출력

정수, 문자, 문자열 등 데이터를 화면에 출력하기 위해서는 표준 출력 스트림 System.outprintln() 혹은 print() 메소드를 호출한다.

  • System.out.println()은 여러 타입의 데이터를 출력 가능하며 출력 후 다음 행으로 넘어간다.
  • System.out.print()을 사용하면 출력 후 다음 줄로 넘어가지 않는다.
System.out.println("Hello"); // Hello 출력


📝 예제 2-1

Hello, 자바프로그램의 기본 구조

// 소스파일 : Hello.java
public class Hello {
	public static int sum(int n, int m) { // sum() 메소드
		return n+m;
	}
	
// main() 메소드에서 실행 시작
	public static void main(String[] args) {
		// 변수 선언
		int i = 20;
		int s;
		char a;
		
		s = sum(i, 10); // 메소드 호출
		a = '?'; // 문자 타입 데이터는 ''으로 감싸준다
		System.out.println(a); // 문자 '?' 출력 
		System.out.println("Hello"); // 문자열 "Hello" 출력
		System.out.println(s); // 정수 s 값 30 출력
		
	}
}

2.2 식별자

식별자(identifier)란 클래스, 변수, 상수, 메소드에 붙이는 이름 (= 네이밍)

📖 식별자 이름 규칙

  • 특수문자(%, *, &, @, ^ 등), 공백(탭, space 등)은 식별자로 사용할 수 없으나 -, $는 예외로 사용 가능하다.
  • 유니코드 문자(일본어 등), 한글 사용 가능하지만 사용하지 않는 것이 좋다. .java 파일에서는 문제 없으나 컴파일 후 .class 파일에서 문제가 발생할 가능성이 있다.
  • 자바 언어의 키워드(if, while, class 등)는 식별자로 사용할 수 없다.
  • ⭐ 식별자의 첫 번째 문자숫자는 사용 불가하다.
  • _, $를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다.
  • 불린 리터럴(ture, false)과 널 리터럴(null)은 식별자로 사용 불가능하다.
  • 길이 제한이 없다.
  • 대소문자를 구별한다.
    int barChart; 와 int barchart;는 서로 다른 식별자 선언

📖 식별자 이름 사례

  • 잘못된 예
	int 3Chapter; // 숫자는 식별자 첫 번째 문자로 사용 불가능
	class if{}	// if는 예약어이기 때문에 식별자로 사용 불가능
	char false; // false는 불린 리터럴이므로 사용 불가능
	void null() {} // null은 널 리터럴이므로 사용 불가능
	class %calc {} // '%'는 특수문자로 사용 불가능

2.3 자바의 데이터 타입

데이터 타입(data type)이란 자바에서 다룰 수 있는 데이터의 종류를 말한다.
총 9가지의 데이터 타입이 있다.

  • 기본 타입(basic type) : 8개
    • boolean
    • char
    • byte
    • short
    • int
    • long
    • float
    • double
  • 레퍼런스 타입(reference type) : 1개
    C/C++의 포인터와 비슷한 개념이지만 실제 메모리 주소값을 가지는 것은 아니다.
    레퍼런스는
    고정적 크기**를 가지고 있지 않는다.
    레퍼런스 타입은 한 가지이지만 다음 세 가지 경우로 이용된다.

    • 배열에 대한 레퍼런스 : C에서는 배열의 크기를 선언하고 사용하지만, 자바에서는 실시간으로 배열이 만들어질 수 있다. 배열에 대한 주소 값 정도로 이해
    • 클래스(class)에 대한 레퍼런스 : 객체에 대한 주소 값 정도로 이해
    • 인터페이스(interface)에 대한 레퍼런스

📖 자바의 기본 타입

기본 타입의 크기는 CPU나 운영체제에 따라 변하지 않는다.

◾ 정수 : byte(1 바이트), short(2 바이트), int(4 바이트), long(8 바이트)
◾ 실수 : float(4 바이트), double(8 바이트) - 소수점 4 자리 이상
◾ 문자형 : char(2 바이트, Unicode)
◾ 논리형 : boolean (1비트, ture or false)


💡 Java의 char가 2바이트인 이유

C/C++에서는 char이 1바이트이지만, Java에서는 2바이트이다.
자바에서는 문자를 2바이트로 표준화된 유니코드(Unicode) 체계를 사용하기 때문이다.
자바에서는 한글, 영문 할 것 없이 문자 하나당 2바이트 코드가 사용되므로 영어와 한글이 섞인 경우 문자다루기가 C/C++보다 편리하다.

💡 유니코드

유니코드(Unicode)란 전 세계의 모든 문자를 표현하기 위해, 문자당 2바이트의 산업 표준 코드 체계로 유니코드 협회가 제정한다. 유니코드에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자를 처리하기 위한 알고리즘 등이 포함되어 있다.


📖 문자열

자바에서 문자열은 기본 타입에 속하지 않는다. JDK에서 제공하는 String 클래스로 문자열을 표현한다.

String toolName = "JDK";

문자열과 기본 타입의 + 연산으로 문자열을 연결한 새로운 문자열을 생성한다. ( = 문자열 연산)

System.out.println(toolName + 1.8); // 문자열이 포함된 연산이므로 '문자열 연산' -> "JDK1.8" 출력
System.out.println("(" + 3 + "," + 5 + ")"); // 문자열 연산 -> "(3,5)" 출력
System.out.println(toolName + 1.8 + "이 출시됨"); // 문자열 연산 -> "JDK1.8이 출시됨" 출력

📖 변수와 선언

  • 변수 : 데이터를 임시 저장하기 위한 공간으로 변수 값은 프로그램 수행 중 변경될 수 있다.
  • 변수 선언 : 변수를 선언하면 변수 타입 크기에 맞는 메모리 공간이 할당된다.
    ◽ 변수 선언 방법 : 데이터 타입 변수 이름 (= )
    ◽ 동일한 타입의 변수를 여러 개 선언할 때 콤마로 분리하여 나열한다.
	int radius;
	double weight = 75.56; // weight 변수의 초깃값으로 75.56 지정
	char c1, c2, c3 = 'a' // 3개의 변수를 한 번에 선언하고 c3을 'a'로 초기화

📖 리터럴(literal)

  • 리터럴
    • 프로그램에 직접 표현한 값을 말한다.
    • 그냥 변수나 함수에 붙는 값으로만 이해하면 된다.
    • 정수, 실수, 문자, 논리, 문자열 타입 모두 리터럴이 있다
      = 정수, 실수, 문자, 논리, 문자열을 값으로 쓸 수 있음

1. 정수 리터럴

유형설명사례
10진수0으로 시작하지 않는 수15
8진수0으로 시작하는 수015 (십진수로 13)
16진수0x로 시작히는 수0x15 (십진수로 21)
2진수0b로 시작하는 수0b0101 (십진수로 5)
  • 자바에서 정수 리터럴은 int 타입으로 컴파일한다. ⭐⭐
  • 정수 리터럴을 long 타입으로 지정하고자 하면 숫자 뒤에 L 또는 l을 붙이면 된다.
	long g = 24L; //24L은 24l과 동일

2. 실수 리터럴

  • 실수 리터럴은 소수점 형태지수(exponent)형태로 실수를 표현한 값이다.

    1. 12.0 0.1234 .1234 1234E-4 (지수 형태)
  • 실수 리터럴은 double 타입(주로 소수점 4자리 이상)으로 자동 처리된다.

	double d = 0.1234;
    double 3 = 1234E-4; // 1234E-4 = 1234⨉10^-4
  • 숫자 뒤에 f 또는 F를 붙이면 float 타입으로, d 또는 D를 붙이면 double 타입으로 강제 변환할 수 있다. (명시적 형 변환 : 강제적으로 수행하는 타입 변환⭐⭐)
	float f = 0.1234; // 0.1234는 본래 double 타입이기 때문에 컴파일 오류가 발생한다.
    float f = 0.1234f; // float 타입으로 강제 변환하였기 때문에 컴파일 오류가 발생하지 않는다.
    double d = .1234D; //.1234와 .1234D는 동일

3. 문자 리터럴

  • 단일 인용부호 ' '로 문자를 표현하거나 \u 다음에 문자의 유니코드 값(4자리 16진수)을 사용하여 표현한다.
	char a = 'W';
    char b = '글';
    char c = \uae00; // '글'의 유니코드 값(ae00) 사용
  • 특수문자 리터럴은 백슬래시 \ 다음에 특수 기호를 붙여 표현한다. 이스케이프 시퀀스라고도 한다.

    특수문자 리터럴의미
    '∖b'백스페이스(backspace)
    '∖t'탭(tab)
    '∖n'라인피드(line feed)
    '∖f'폼피드(form feed)
    '∖r'캐리지 리턴(carriage return)
    '∖"'이중 인용부호(double quote)
    '∖''단일 인용부호(single quote)
    '∖∖'백슬래시(backslash)

    💡 폼피드 : 페이지 나누기!! (연속 용지 사용하는 프린터에서 다음 페이지로 넘어갈 때 사용)
    💡 캐리지 리턴 : 현재 커서를 나타내는 위치를 맨 앞으로 이동시키라는 의미!!


4. 논리 타입 리터럴과 boolean 타입

논리 타입 리터럴은 논리 값 ture 또는 false를 표시한다. boolean 타입 변수에 직집 치환하거나 조건문에 사용한다.

boolean a = true;
boolean b = 10 > 0; // 10 > 0이 참이므로 b의 값은 ture이다.
boolean c = 1; // 타입 불일치 오류

while(ture) { // 무한 루프
...
}
  • boolean 타입 변수에는 논리 타입 리터럴이나 참, 거짓을 판별할 수 있는 수식이 값으로 올 수 있다.
  • C/C++ 과 달리 자바에서는 1과 0을 참, 거짓으로 사용하지 않는다. 따라서 boolean형 변수에 1이나 0의 값이 올 경우 타입 불일치오류가 발생한다.

5. 기본 타입 이외의 리터럴 (null, 문자열 리터럴)

  • null 리터럴
    null은 기본 타입에 사용 될 수 없고 객체 레퍼런스에 대입된다.
	int n = null; // 오류. 기본 타입에 null 값 지정 불가
    String str = null; //String은 기본 타입아닌 객체 레퍼런스이므로 정상
  • 문자열(String) 리터럴
    문자열 리터럴은 "Hello"와 같이 이중 인용부호로 묶어 표현한다.
    문자열 리터럴은 String 객체로 자동 처리
	"Good", "Morning", "자바", "3.19", "26", "a"
    String str = "Good";


📖 var 키워드

  • Java 10부터는 var 키워드를 사용하여 변수의 타입을 생략하고 간단히 변수를 선언할 수 있다.
    컴파일러는 var 키워드로 선언된 문장을 추론하여 변수의 타입을 자동으로 결정한다.
	var price = 200; // price는 int 타입으로 결정
	var name = "kitae"; // name은 String 타입으로 결정
	var pi = 3.14; // pi는 double 타입으로 결정
	var point = new Point(); // point는 Point 타입으로 결정
	var v = new Vector<Integer>(); // v는 Vector<integer> 타입으로 결정(7장 참조)
  • 변수 선언문에 초깃값이 주어지지 않으면 컴파일 오류가 발생한다
	var name; // 컴파일 오류. 초깃값이 주어지지 않으면 변수 name의 타입을 추론할 수 없다.
  • var 키워드는 지역 변수에만 한정된다.

📝 예제 2-2

var 키워드를 사용하여 변수 선언

// 소스파일 : Var.java

public class Var {
	public static void main(String[] args)	{
		var price = 200; // price는 int 타입으로 결정
		var name = "kitae"; // name은 String 타입으로 결정
		var pi = 3.14; // pi는 double 타입으로 결정
		
		System.out.println("price = " + (price + 1000));
		System.out.println("name = " + name);
		System.out.println("pi = " + pi*10); // *가 +보다 먼저 계산되므로 () 필요 없음
		
	}
}

📖 상수

  • 리터럴을 상수로 선언하면 변수처럼 표현 가능
  • 상수는 final 키워드를 사용하여 선언
  • 상수 이름은 주로 대문자로 나타냄
  • 상수 선언 시 값을 반드시 초기화
  • 선언 시 값이 초기화되면 더 이상 변경 불가
  • static 키워드를 붙여 선언하는 것이 바람직 (5장 참조)
	final int LENGTH = 20;
	static final double PI = 3.141592; // static 키워드를 붙이는 것이 바람직

📝 예제 2-3

변수, 리터럴, 상수 사용하기
: 원의 면적을 계산하여 출력하는 프로그램을 작성하자.

// 소스파일 : CircleArea.java

public class CircleArea {
	public static void main(String[] args) {
		final double PI = 3.14;		// 원주율을 상수로 선언
		double radius = 10.2;		// 원의 반지름
		double circleArea = PI * radius * radius;	// 원의 면적 계산
		
		// 원의 면적을 화면에 출력한다.
		System.out.print("반지름 " + radius + ", ");
		System.out.println("원의 면적 = " + circleArea);
	}

}

📖 타입 변환

타입 변환이란 한 타입의 값을 다른 타입의 값으로 변환하는 것을 말한다.

1. 자동 타입 변환

  • 치환문(=)이나 수식 내에서 타입이 일차하지 않을 때
  • 컴파일러가 작은 타입을 큰 타입으로 자동 변환한다.
	long m = 25; // (치환문) 25는 int 타입이므로 25가 더 큰 타입인 long 타입으로 자동 변환
    double d = 3.14 * 10; // (수식 내) 실수 연산을 위해 10이 10.0으로 자동 변환

2. 강제 타입 변환 (캐스팅)⭐⭐⭐

  • 개발자의 의도적 타입 변환
  • 데이터 손실이 발생한다.
	int n = 300;
	byte b = (byte)n;
    
    /*
    	byte 타입은 -128~127 범위이기 때문에 변수 b에 300이 저장되지 않고,
        300%256=44 즉, 300에서 256을 초과한 만큼인 44가 변수 b에 저장되어 데이터 손실이 발생한다.
    */
  • ()안에 타입을 강제로 지정해야 한다.
  • 강제 타입 변환을 캐스팅(casting)이라고도 부른다.

📝 예제 2-4

타입 변환 : 자동 타입 변환과 강제 타입 변환이 들어 있는 코드이다. 실행결과는 무엇인가?

public class TypeConversion {

	public static void main(String[] args) {
		byte b = 127;
		int i = 100;
		
		System.out.println(b+i);				 // b가 int 타입으로 자동 변환
		System.out.println(10/4);				 // int/int 이므로 계산 결과는 2
		System.out.println(10.0/4);				 // 4가 double 타입으로 자동 변환 -> 10.0/4.0
		System.out.println((char)0x12340041);	 // char 타입으로 강제변환되어 하위 2바이트 0x0041만 남음 -> 아스키코드 0x41에 해당하는 문자는 'A'
		System.out.println((byte)(b+i));		 // 227은 16진수로 0xE3 -> 2진수로 11100011 -> (부호 주의) 10진수로 -29 
		System.out.println((int)2.9 + 1.8);		 // 2.9가 int 타입으로 강제변환-> 2+1.8 -> 2가 double 타입으로 자동변환
		System.out.println((int)(2.9 + 1.8));	 // 2.9+1.8 = 4.7이 int 타입으로 강제변환
		System.out.println((int)2.9 + (int)1.8); // 2.9와 1.8이 각각 int 타입으로 강제변환

	}

}

/* 출력결과
227
2
2.5
A
-29
3.8
4
3
*/


2.4 자바의 키 입력

📖 System.in

  • 키보드 장치와 직접 연결되는 표준 입력 스트림 객체 ⭐⭐
  • 키 값을 바이트 정보(문자 아님)로 바꾸어 제공(리턴)하는 저수준(low-level) 스트림 객체로, System.in을 직접 사용하면 읽은 바이트 정보를 응용프로그램이 문자나 숫자로 변환해야하는 번거로움이 있다.
  • 키보드에서 입력된 키를 사용자가 원하는 타입으로 변환해주는 고수준(high-level) 스트림 클래스 Scanner를 사용할 것을 권장

📖 Scanner

  • 키 입력을 위한 목적으로 자바 패키지에서 제공되는 고수준 스트림 클래스
  • 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴한다.

1. Scanner 객체 생성

Scanner scanner = new Scanner(System.in);	// Scanner 객체 생성
  • scanner 객체는 바이트 표준 입력 스트림 System.in으로 하여금 키보드로부터 입력을 받게 한다.
  • System.in이 반환하는 바이트 스트림을 원하는 타입으로 변환하여 리턴한다.
  • 데이터 타입은 레퍼런스 타입 : 클래스에 대한 레퍼런스⭐
  • new 연산자를 사용한다. ⭐⭐⭐
  • 외부에서 만든 class를 사용하는 경우 이름을 새로 부여하고 사용해야 한다. (여기서는 scanner라는 이름을 부여)⭐

2. import 문 필요

Scanner를 사용하기 위해서는 프로그램의 맨 앞줄에 import 문이 필요히다. ⭐

import java.util.Scanner;
  • import 문은 Scanner 클래스의 경로명이 java.util.Scanner임을 알려준다.
  • import 문이 없으면 자바 컴파일러가 Scanner 클래스 코드가 어디에 있는지 찾을 수 없다.

3. Scanner 클래스로 키 입력받기

  • Scanner 클래스는 사용자가 입력하는 키 값을 공백으로 구분되는 토큰 단위로 읽는다.
  • 공백 : '\f', '\n', '\r', ' '
  • Scanner 클래스의 메소드를 호출하여 각 토큰을 원하는 타입으로 변환하여 얻어낼 수 있다.
  • Scanner 클래스의 주요 메소드
메소드설명
String next()다음 토큰을 문자열로 리턴
byte nextByte()다음 토큰을 byte 타입으로 리턴
short nextShort()다음 토큰을 short 타입으로 리턴
int nextInt()다음 토큰을 int 타입으로 리턴
long nextLong()다음 토큰을 long 타입으로 리턴
float nextFloat()다음 토큰을 float 타입으로 리턴
double nextDouble()다음 토큰을 double 타입으로 리턴
boolean nextBoolean()다음 토큰을 boolean 타입으로 리턴
String nextLine()'\n'을 포함하는 한 라인을 읽고, '\n'을 버린 나머지만 문자열로 리턴
void close()Scanner의 사용 종료
Boolean hasNext()                                 현재 입력된 토큰이 있으면 true, 아니면 새로운 입력 때까지 무한정 대기.새로운 입력이 들어올 때 true 리턴. ctrl-z 키가 입력되면 입력 끝이므로 false 리턴

4. Scanner 스트림 닫기

scanner.close();
  • 메모리를 많이 차지 하기 때문에 꼭 닫는 것을 권장한다.
  • 응용프로그램에서 Scanner를 닫는 코드가 없으면 컴파일 시에 경고가 발생하지만, 실행하는 데에는 특별히 문제가 없다.
  • 프로그램이 종료되면 자동으로 닫힌다.


📝 예제 2-5

Scanner를 이용한 키 입력 연습 : Scanner 클래스를 이용하여 이름, 도시, 나이, 체중, 독신 여부를 입력받고, 다시 출력하는 프로그램을 작성하라.

import java.util.Scanner;

public class ScannerEx {

	public static void main(String[] args) {
		System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요.");
		Scanner scanner = new Scanner(System.in); // 레퍼런스 타입, 클래스 이름, new 연산자, Scanner 스트림 클래스(표준 입력 스트림 객체)
		String name = scanner.next();
		String city = scanner.next();
		int age = scanner.nextInt();
		double weight = scanner.nextDouble();
		boolean single = scanner.nextBoolean();
		
		System.out.println("당신의 이름은 " + name + "입니다.");
		System.out.println("당신이 사는 도시는 " + city + "입니다.");
		System.out.println("당신의 나이는 " + age + "살입니다.");
		System.out.println("당신의 체중은 " + weight + "입니다.");
		System.out.println("당신의 독신 여부는 " + single + "입니다.");
        
        scanner.close();
	}

좋은 웹페이지 즐겨찾기