JDK 기능
1. compiler 역할 .java ->.class
2. JRE
3. JDB :디버깅
중단점 찍고 디버그 -> resume program
- public class Main {
- 클래스 정의
- public : 클래스 경로 외부에서 실행시킬 수 있다고 표시해 주는 접근 제어자 입니다.
- 클래스 경로 외부에서 호출 못하도록 막는 접근 제어자는 private (그 외 protected 도 있음)
- class : 객체를 만드는 클래스라고 선언
- Main : 클래스 명
- 파일명과 일치 시켜야 합니다. (다르면 알림 문구가 뜹니다.)
- 그렇게 해야 Java 컴파일러가 바이트코드 변환했을 때의 파일 확장명(.class )과 일치됩니다.
- public static void main(
- main 메서드 정의
- public : 외부에서 실행시킬 수 있다고 표시해 주는 “접근 제어자” 입니다.
- static : Java 컴파일러가 바이트 코드로 변환할 때 미리 정의되는 메서드 표기
- 따라서 앱 실행 시 한 번만 정의되며 static 메서드 또는 변수(데이터) 끼리만 호출할 수 있습니다.
- void : 메서드의 응답 값을 정의하는 곳인데 void는 응답할 값이 없다는 정의입니다.
- int는 정수, char는 문자, string은 문자열 등…
- (String[] args)
- 메서드가 시작될 때 넘겨받을 데이터들(변수들)
- String[] : 문자열 여러 개 데이터 타입
- args : 문자열 여러 개 데이터의 이름 (사용자가 정의한 값 아무거나 써도 됨)
int number = 10; // 1. 선언과 동시에 값을 저장공간에 저장 (=초기화)
number = 11; // 2. 선언 이후에 다른값을 저장공간에 저장
변수 : 변하는 저장공간
논리형 변수 : boolean
True/False 값만 저장합니다.
boolean flag = true; // 1. 논리형 변수 boolean 으로 선언 및 True 값으로 초기화
flag = false; // 2. False 값으로도 저장할 수 있습니다.
변수형
문자형 변수 : char
‘A’, ‘1’ 와 같은 문자 하나만 저장합니다.
char alphabet = 'A'; // 문자 하나를 저장합니다.
- 정수형 변수 : byte, short, int, long
- 0,1,2,99 와 같은 정수형 숫자 값을 저장합니다.
- 정수형 변수 표현 범위
- 실수형 변수 : float, double
- 0.123, 0.99999 와 같은 소수점 실숫값을 저장합니다.
- 실수형 변수의 표현 범위
- float (4byte) : 3.4 * -10^38 ~ 3.4 * 10^38(long 보다 큼) 범위의 숫자 저장이 가능합니다.
- double (8byte) : 1.7 * -10^308 ~ 1.7 * 10^308(long 보다 큼) 범위의 숫자 저장이 가능합니다.
참조형 변수
문자열 변수 : String
“Apple”, “텍스트” 와 같은 문장을 저장합니다.
String message = "Hello World"; // 문자열을 저장합니다.
그 외 : Object, Array, List …
객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장합니다.
List<int> alphabet = [0,1,2,3]; // 기본형 변수 여러개를 저장합니다.
래퍼 클래스(Wrapper Class)라는 말 그대로 “기본형 변수를 클래스로 한번 랩핑(감싸는) 변수”라고 생각하시면 됩니다.
// 숫자 -> 문자(형변환)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int asciiNumber = sc.nextInt();
char ch = (char)asciiNumber; // 문자로 형변환을 해주면 숫자에 맞는 문자로 표현됩니다.
System.out.println(ch);
}
}
// 입력 97 // 출력 a
#문자->숫자(형변환)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char letter = sc.nextLine().charAt(0); // 첫번째 글자만 받아오기위해 charAt(0) 메서드를 사용합니다.
int asciiNumber = (int)letter; // 숫자로 형변환을 해주면 저장되어있던 아스키 숫자값으로 표현됩니다.
System.out.println(asciiNumber);
}
}
// 입력 a // 출력 97
- 선언 관점에서 차이점
- 문자 (char)
- 문자 한 개만 저장하며 따옴표를 사용하여 값을 지정합니다. (ex. ’A’)
char alphabet = 'A'; // 문자 하나를 저장합니다.
- 문자열 (String)
- 문자 여러 개를 문장 형태로 저장하며 쌍따옴표를 사용하여 범위를 지정합니다. (ex. “ABCDEFG”)
String message = "Hello World"; // 문자열을 저장합니다.
- 저장 관점에서 차이점
- 문자 (char)
- 문자 뒤에 \0(널문자)가 없습니다.
(1 byte만 쓰기 때문에 끝을 알아서 데이터만 저장하면 됩니다.)
- 문자열 (String)
- 문장의 끝에 \0(널문자)가 함께 저장이 됩니다.
(몇 개의 byte를 쓸지 모르기 때문에 끝을 표시해야 합니다.)
입력&출력
입력
Java 프로그램에서는 기본적으로 System.in 객체의 next() 명령을 사용해서 입력받습니다.
Scanner sc = new Scanner(System.in); // Scanner 객체를 new 명령어로 생성합니다.
String input = sc.next(); // sc(Scanner)의 .next(); 를 실행하면 input 변수에 입력한 글자를 받을 수 있습니다.
출력
Java 프로그램에서는 기본적으로 System.out 객체의 println() 명령을 사용해서 출력합니다.
Scanner sc = new Scanner(System.in);
String input = sc.next();
System.out.println("입력값 : " + input); // 입력한 글자를 출력합니다.
// 실행 결과
{입력}
입력값 : {입력}
형변환
double doubleNumber = 10.101010;
float floatNumber = 10.1010
int intNumber;
intNumber = (int)doubleNumber; // double -> int 형변환
intNumber = (int)floatNumber; // float -> int 형변환
int intNumber = 10;
double doubleNumber = (double)intNumber; // int -> double 형변환
float floatNumber = (float)intNumber; // int -> float 형변환
ctrl + / : 주석처리
조건문
boolean flag = true;
if (flag) {
System.out.println("flag 값은 true 입니다."); // flag 값은 true 입니다. 출력
}
조건문 with else
boolean flag = false;
if (flag) {
System.out.println("flag 값은 true 입니다."); // 미출력
} else {
System.out.println("flag 값은 false 입니다."); // flag 값은 false 입니다. 출력
}
조건문 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 값은 모르는 값입니다."); // 미출력
}
중첩 조건문
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 입니다."); // 미출력
}
}
// 조건문으로 가위바위보 만들기
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 문
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월 출력
for 문
for(int i=0; i < 4; i++) { // 변수 i 값은 0 ~ 3 까지 반복
System.out.println(i + "번째 출력"); // i 변수와 문자열 합치기
}
// 출력
0번째 출력
1번째 출력
2번째 출력
3번째 출력
향상된 for 문
int[] numbers = {3,6,9,12,15};
for(int number: numbers) {
System.out.print(number + " ");
}
// 출력
3 6 9 12 15
만약 기존 for 문으로 구현한다면?
int[] numbers = {3,6,9,12,15};
for(int i = 0; i < numbers.length; i++) { // 배열에 .length 를 붙이면 길이값이 응답됩니다.
System.out.println(numbers[i]);
}
// 출력
3 6 9 12 15
while 문
int number = 0;
while(number < 3) {
number++;
System.out.println(number + "출력");
}
// 출력
1출력
2출력
3출력
do-while 문
int number = 4;
do {
System.out.println(number + "출력");
} while(number < 3); // 연산을 한번 수행 후 조건문 체크
// 출력
4출력
break 명령어
int number = 0;
while(number < 3) {
number++;
if (number == 2) {
break; // 2일때 반복 중단
}
System.out.println(number + "출력");
}
// 출력
1출력
break 명령 범위
for (int i = 0; i < 10; i++) {
System.out.println("i: " + i);
if (i == 2) {
break; // i 가 2일때 가장 바깥 반복문이 종료됩니다.
}
for (int j = 0; j < 10; j++) {
System.out.println("j: " + j);
if (j == 2) {
break; // j 가 2일때 가장 안쪽 반복문이 종료됩니다.
}
}
}
// 출력
i: 0 // 바깥 반복문 부터 수행 시작
j: 0 // 안쪽 반복문 1회차 수행
j: 1
j: 2 // j 가 2일때 안쪽 반복문 break;
i: 1 // 바깥 반복문은 아직 break; 호출이 안됬으므로 다음 반복수행
j: 0 // 안쪽 반복문 2회차 수행
j: 1
j: 2 // j 가 2일때 안쪽 반복문 두번째 break;
i: 2 // i 가 2일때 바깥 반복문도 break; 호출되어 종료
continue 명령
int number = 0;
while(number < 3) {
number++;
if (number == 2) {
continue; // 2일때 반복 패스
}
System.out.println(number + "출력");
}
// 출력
1출력
3출력
구구단
public class W01 {
public static void main(String[] args) {
for(int i=1;i<=9;i++) {
for(int j=2;j<=9;j++) {
System.out.println(i+ "곱하기"+j + "는" +(i*j)+"입니다");
}
}
}
}
선택적 구구단 생성기
Scanner sc = new Scanner(System.in);
int passNum = sc.nextInt(); // 출력제외할 구구단수 값
for (int i = 2; i <= 9; i++) {
if (i == passNum) {
continue;
}
for (int j = 2; j <= 9; j++) {
System.out.println(i + "곱하기" + j + "는" + (i * j) + "입니다.");
}
}
// 입력
2
// 출력 - 입력값인 2단은 건너띄고 구구단 출력
3곱하기2는6입니다.
3곱하기3는9입니다.
3곱하기4는12입니다.
... 중략 ...
9곱하기8는72입니다.
9곱하기9는81입니다.
'JAVA' 카테고리의 다른 글
| JAVA 계산기 만들기 (0) | 2024.04.29 |
|---|