[Java] Java Programming Basic
1, 자바 프로그램 구성 요소
클래스
메소드
자바 프로그램의 일반적인 구조
문장
주석
2 변수와 자료형
변수
식별자 만들기
자료형
기초형
- 자바 : 정수형, 실수형, 문자형, 논리형
Data Type | Description | Size | Range |
---|---|---|---|
byte | 부호 있는 정수 | 1byte(8bits) | -128 ~ 127 |
short | 부호 있는 정수 | 2byte(16bits) | -32768 ~ 32767(= 2^16 -1) |
int | 부호 있는 정수 | 4byte(32bits) | |
long | 부호 있는 정수 | 8byte(64bits) | |
float | 부동소수점형 | 4byte(32bits) | |
double | 부동소수점형 | 8byte(64bits) | |
char | 문자형 | 2byte(16bits) | |
boolean | 논리형 | 1bits |
- C Language : 정수형, 실수형, 문자형
C - 정수형
Data Type | Description | Size | Range |
---|---|---|---|
short | 부호 있는 정수 | 2byte(16bits) | -32768 ~ 32767 |
int | 부호 있는 정수 | 4byte(32bits) | |
long | 부호 있는 정수 | 4byte(32bits) | |
long long | 부호 있는 정수 | 8byte(64bits) | 0 ~ 65535 |
unsigned short | 부호 없는 정수 | 2byte(16bits) | |
unsigned int | 부호 없는 정수 | 4byte(32bits) | |
unsigned long | 부호 없는 정수 | 4byte(32bits) | |
unsigned long long | 부호 없는 정수 | 4byte(32bits) |
C - 실수형
Data Type | Description | Size | Range |
---|---|---|---|
float | 단일 정밀도(single-precision) 부동소수점 | 4byte(32bits) | |
double | 두 배 정밀도(double-precision) 부동소수점 | 8byte(64bits) | |
long double | 두 배 정밀도(double-precision) 부동소수점 | 8byte(64bits) |
C - 문자형
Data Type | Description | Size | Range |
---|---|---|---|
char | 부호 있는 문자 | 1byte(8bits) | -128 ~ 127 |
unsigned char | 부호 없는 문자 | 1byte(8bits) | 0 ~ 255 |
문자형
리터럴
상수
- 상수: 프로그램이 실행되는 동안 값이 변하지 않는 수 또는 변경 불가능한 수
- 키워드 final
final double PI = 3.141592;
변수 타입 추론 기능
- java 10부터 도입
int age = 22;
String name = "Kim";
var age = 22; // age는 int 타입으로 추론
var name = "Kim"; // name은 String 타입으로 추론
예제 2-1 1광년 계산하기
public class Practice {
public static void main(String[] args) {
final double SPEED_OF_LIGHT = 300000000;
double lightYear;
lightYear = SPEED_OF_LIGHT * 365 * 24 * 60 * 60;
System.out.println("빛이 1년 동안 가는 거리: " + lightYear + "km"); // 빛이 1년 동안 가는 거리: 9.4608E15km
}
}
예제 2-2 원의 면적 계산하기
public class Practice {
public static void main(String[] args) {
final double PI = 3.141592;
double radius, area;
radius = 5;
area = PI * radius * radius;
System.out.println("반지름이 5인 원의 면적은 " + area); // 반지름이 5인 원의 면적은 78.5398
}
}
문자열
- Java에는 내장된 문자열 자료형이 없다.
- String 클래스: 문자열을 나타내는 자료형
String s1 = "Hello";
String s2 = "World¡";
형변환
형변환: 하나의 자료형을 다른 자료형으로 변환하는 것
- 자동적인 형변환
컴퓨터에서는 정수 계산 하드웨어와 실수 계산 하드웨어는 완전히 다르기 때문에 산술적인 연산을 하기 전에 피연산자의 타입을 통일해야 한다. 수식을 계산할 때 가장 범위가 넓은 피연산자의 타입으로 변환한다. byte 수가 클수록 범위가 넓다. 정수 < 실수. byte -> short, char -> int -> long -> float -> double
double sum = 1.3 + 12; // 12는 12.0으로 변환된다.
- 강제적인 형변환
변환하려는 값의 앞에 원하는 자료형을 적는다.
int x =3;
double y = (double) x;
축소변환
i = (int)12.5; // 12만 저장된다.
예제 2-3 형변환 실습하기
// 다음 코드의 실행 결과를 예측하라.
public class Practice {
public static void main(String[] args) {
int i;
double f;
f = 1 / 5;
System.out.println(f);
f = (double)1 / 5;
System.out.println(f);
i = (int) 1.7 + (int) 1.8;
System.out.println(i);
}
}
/*
0.0
0.2
2
*/
3. 콘솔에서 입력받기
입력받기
- System.in은 키보드에서 바이트를 읽어서 우리에게 전달한다.
- Scanner 객체를 이용하여 바이트들을 정수나 실수, 문자열로 변환한다.
- nextInt()를 호출하여 키보드에서 받은 바이트들을 정수로 변환한다.
import java.util.Scannar;
Scanner sc = new Scanner(System.in);
int x = sc.nextInt()
예제 2-4 사용자로부터 입력받은 두 수를 받아서 더하기
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x, y, sum;
System.out.print("첫 번째 숫자를 입력하시오: ");
x = sc.nextInt();
System.out.print("두 번째 숫자를 입력하시오: ");
y = sc.nextInt();
sum = x + y;
System.out.println(sum);
}
}
import 문장
- 자바에서 모든 클래스는 사용하기 전에 import 되어야 한다.
Scanner 클래스
- Scanner 클래스: 자바 애플리케이션이 사용자로부터 쉽게 정수나 문자열을 받을 수 있도록 자바 패키지에서 제공하는 클래스
- Scanner 클래스는 키보드로부터 바이트 값을 받아서 분리자를 이용하여 각 바이트들을 token으로 분리한다. 특정한 지정(‘’, ‘\n’, ‘\t’)가 없으면 공백문자이다.
Scanner 클래스는 다양한 입력 메소드를 제공한다.
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Kim 23 84.0
String name = sc.next(); // 한 단어(Token)을 "Kim"을 읽는다.
int age = sc.nextInt(); // 문자열 "23"을 정수 23으로 변환한다.
double weight = sc.nextDouble(); // 문자열 84.0을 실수 84.0으로 변환한하여 반환한다.
String line = sc.nextLine();
System.out.println(name); // Kim
System.out.println(age); // 23
System.out.println(weight); // 84.0
System.out.println(line);
}
}
// Q. 이 코드에서 nextLine 메소드가 실행되지 않는 이유
/*
이 코드에서 nextLine() 메소드가 실행되지 않는 이유는, 앞서 호출된 nextDouble() 메소드는 줄바꿈 문자(엔터키)를 버리지 않고 그대로 입력버퍼에 남겨둬서, nextLine() 메소드가 이전에 입력된 줄바꿈 문자를 그대로 읽어와서 아무것도 입력하지 않았음에도 불구하고 빈 문자열("")을 반환하기 때문입니다.
따라서 nextLine() 메소드가 실행되기 전에 sc.nextLine()를 추가하여 입력버퍼에 남아있는 줄바꿈 문자를 버리고 넘어갈 수 있도록 해주어야 합니다.
아래는 수정된 코드입니다.
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Kim 23 84.0
String name = sc.next(); // 한 단어(Token)을 "Kim"을 읽는다.
int age = sc.nextInt(); // 문자열 "23"을 정수 23으로 변환한다.
double weight = sc.nextDouble(); // 문자열 84.0을 실수 84.0으로 변환한하여 반환한다.
sc.nextLine(); // 입력 버퍼에 남아있는 줄바꿈 문자를 버린다.
String line = sc.nextLine(); // 이제 올바르게 입력을 받을 수 있다.
System.out.println(name); // Kim
System.out.println(age); // 23
System.out.println(weight); // 84.0
System.out.println(line);
}
}
*/
예제 2-5 사용자로부터 이름과 나이를 받는 프로그램
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
String name;
int age;
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하시오: ");
name = sc.nextLine();
System.out.print("나이를 입력하시오: ");
age = sc.nextInt();
System.out.println(name + "님 안녕하새요! " + (age) + "세이시네요.");
}
}
중간점검 Scanner 클래스를 이용하여 사용자가 입력한 3개의 부동소수점수의 합을 계산하여 출력하는 프로그램을 작성하라.
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double a1 = sc.nextDouble();
double a2 = sc.nextDouble();
double a3 = sc.nextDouble();
System.out.println(a1 + a2 + a3);
}
}
4. 수식과 연산자
수식
- 수식: 프로그램에서 계산을 하기 위해 사용하는 것
- 수식은 피연산자(operand)와 연산자(operator)로 이루어진다.
- 연산자: 특정한 연산을 하는 기호
- 피연산자: 연산의 대상
연산자
- 수식이 계산될 때 우선순위가 높은 연산자가 먼저 계산된다.
연산자의 우선순위
- 표에서 위에 있을수록 우선순위가 높다.
- 하나의 수식 안에 우선순위가 같은 연산자가 여러 개 있다면 왼쪽에서 오른쪽으로 계산된다.
operator | 우선순위 | 결합 규칙 |
---|---|---|
단항(posfix) | ++, – | 오른쪽에서 왼쪽 |
단항(prefix) | ++, –, +, -, !, ~ (형변환) | 오른쪽에서 왼쪽 |
곱셈 | *, /, % | 왼쪽에서 오른쪽 |
덧셈 | +, - | 왼쪽에서 오른쪽 |
이동 | «, »», » | 왼쪽에서 오른쪽 |
관계 | <>, <=, >= | 왼쪽에서 오른쪽 |
동등 | ==, != | 왼쪽에서 오른쪽 |
비트별 AND | & | 왼쪽에서 오른쪽 |
비트별 XOR | ^ | 왼쪽에서 오른쪽 |
비트별 OR | . | 왼쪽에서 오른쪽 |
논리적 AND | && | 왼쪽에서 오른쪽 |
논리적 OR | . | 왼쪽에서 오른쪽 |
조건 | ?: | 왼쪽에서 오른쪽 |
대입 | =, +=, -=, *=, /=, %= | 왼쪽에서 오른쪽 |
산술 연산
연산자 | 기호 | 의미 | 예 |
---|---|---|---|
덧셈 | + | x와 y를 더한다. | x + y |
뺄셈 | - | x에서 y를 뺀다. | x - y |
곱셈 | * | x와 y를 곱한다. | x * y |
나눗셈 | / | x를 y로 나눈다. | x / y |
나머지 | % | x에서 y로 나눌 때의 나머지값 | x % y |
- 나눗셈 연산자 주의 check
- 나머지 연산자의 의미 check