JAVA 명명규칙
기본 명명 규칙
- 길이 제한 없음
- 예약어 사용 안됨
- 숫자로 시작할 수 없음
- 특수문자는
_ $
만 사용 가능
권장사항
- Pascal Casing : 첫 글자는 대문자, 여러 단어로 이루어진 경우 단어의 첫글자는 대문자 (클래스명)
- Camel Casing : 첫 글자는 소문자, 여러 단어로 이루어진 경우 단어의 첫글자는 대문자 (변수, 메소드명)
- 상수형 변수(변하지 않는 값 자체) : 전부 대문자, 여러 단어가 연결된 경우 _로 구분
데이터 타입
primitive, 기본형 : 8개
- 논리형 : boolean(1bit)
- 문자형 : char(2byte)
- 정수형 : byte(1byte), short(2byte), int(4byte), long(8byte), char(2byte)
- char 도 정수형이다 (’A’ == 65, ‘a’ == 97)
- 실수형 : float(4), double(8)
char a = 'a';
System.out.println(a);
System.out.println((int)a);
int b = 98;
System.out.println(b);
System.out.println((char)b);
- 자동 형변환
- 작은 크기 타입 → 큰 크기 타입으로 자동 형 변환
- 정수형 → 실수형으로 자동 형 변환
int intValue = (int) 3.0;
float floatValue = (float)3.0;
System.out.println(intValue);
System.out.println(floatValue);
double doubleValue = 10;
System.out.println(doubleValue);
byte byteNum1 = 10;
byte byteNum2 = 20;
byte intResult = byteNum1 + byteNum2;
reference, 참조형
연산자
종류 | 연산자 |
---|
증감 | ++, — |
산술 | +, -, *, /, % |
비교 | >, <. ≥, ≤, ==, ≠ |
논리 | &&, |
조건 | (조건)? (참) : (거짓) (삼항연산자) |
대입 | =, *=, /=, +=, -= |
대입 연산
- LV *= RV
- LV : 변수만 올 수 있음
- RV : 변수, 값이 올 수 있음
- 더하기 연산과 연결 연산
System.out.println("3+4 = " + (3 + 4));
System.out.println("3+4 = " + 3 + 4);
System.out.println("3*4 = " + 3 * 4);
논리 연산
int i = 3;
if (i > 3 && ++i > 3) {
System.out.println("조건 만족");
}
System.out.println(i);
if (i > 1 || ++i > 3) {
System.out.println("조건 만족");
}
System.out.println("i = " + i);
삼항 연산
int j = 30;
int k = 25;
int m = (j > k) ? j : k;
System.out.println("큰 값: " + m);
💡
short, byte 처럼 작은 정수타입은 왜 쓸까?
음악, 사진과 같은 멀티미디어 정보는 조회만 해도 변환작업이 일어난다. 데이터 변환을 빨리 하기 위해서 멀티미디어 정보를 저장할때는 0과 1로만 저장한다! ⇒ 기본 처리 단위가 바이트단위이므로, 처리를 빨리하기 위해 short, byte 타입 사용
메모리
- static, non-instance
- 고정 공간
- 실행 중에 가져다 쓸 수 있는 모든 것이 저장된다. ex) main( )
- stack
- 모든 변수가 저장되는 공간
- 자신의 제어블럭을 벗어나는 순간 변수는 stack에서 사라진다.
- heap, instance
데이터 타입과 객체
- 기본형 변수 : 데이터 ‘값’이 저장된다.
- 참조형 변수 : heap공간에 저장된 객체의 ‘주소’가 저장된다.
바이트별 실제 숫자 유효범위
byte | 음수 유효범위 | 양수 유효범위 |
---|
1 | -128 ~ 0 | 0 ~ 127 |
2 | -32768 ~ 0 | 0 ~ 32767 |
4 | -21억4748만3628 ~ 0 | 0 ~ 21억 4748만 3647 |
8 | -9,223,372,036,854,775,808 ~ 0 | 0 ~ 9,223,372,036,854,775,807 |
제어문
if / else if / else
switch / case / default
switch (정수형 or 실수형 변수) {
case 값1:
명령1;
break;
case 값2:
명령2:
break;
default: (else와 같은 역할, 생략가능)
명령;
}
패키지
Calendar
import java.util.Calendar;
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
- 패키지 : 실제 물리적인 저장소 (탐색기와 동일)
- 현재 속해 있는 패키지 : java.lang.*
- 다른 패키지에 있는 클래스(라이브러리)를 사용하려면 import 명령으로 사용할 패키지(클래스)를 명시해주어야 한다.
- package 명령은 자바 파일 가장 첫 줄에 사용한다. (한 번만 사용, 하나의 파일은 하나의 패키지에만 소속된다.)
- import 명령은 횟수 제한 없다. (사용할 클래스를 가진 패키지는 여러 개 일 수 있다.)
Scanner
import java.util.Scanner;
Scanner scan = new Scanner(System.in);
String id = scan.nextLine();
- new : 힙 에다가 이 클래스를 '객체화' 시켜라
💡 new 를 쓰는 것과 안 쓰는 것의 차이?
많이 쓰이는 객체를 getInstance 라는 객체로 만들어놓으면, 모든 사람들이 객체로 가는 고속도로(주소)를 공유할 수 있게 된다.
getInstance 의 목적 (자체적으로 new 를 가짐)
1. 보안 목적 - new 남발하지 못하도록
2. 많이 쓰이는 객체인 경우 한번 만들어 두고 재사용
System.out
과 System.in
System.out
: 표준출력장치, 모니터를 의미
System.in
: 표준입력장치, 키보드를 의미
scan.nextLine()
String
으로 읽어오기 위해 nextLine
사용
scan.nextInt()
배열
새 패키지 만들기
- src > 우클릭 > new > package
- 새로 만든 패키지는 src 아래의 폴더가 된다.
Array (배열)
- 같은 종류(Data type)의 여러 데이터를 하나의 객체로 관리
- 배열 안의 데이터는 모두 같은 데이터타입이어야 한다.
- 즉, 모든 방에 같은 종류의 데이터가 있다.
배열 선언, 초기화, 출력
int[] arr = new int[10];
for (int i=0; i < arr.length; i++) {
arr[i] = i+1;
}
int[]
- int 형 배열
int[10]
- 배열의 크기를 10으로 설정
arr.length
- 배열의 크기
main(String[] args)
public static void main(String[] args) {
System.out.println(args[0]);
System.out.println(args[1]);
for (int i=0; i< args.length; i++) {
System.out.print(args[i] + "\t" + args[i].length());
System.out.println();
}
}
String[] args
- 실행 시 받는 인자로, String 타입의 배열!
args[i].length()
- 배열의 i번째 원소 길이를 구한다.
Program arguments 설정하기
- 이클립스
- java파일에서 우클릭 > run configurations > Arguments > 원하는 인자 넣기 > Apply > run
- 띄어쓰기가 포함되어있다면 큰따옴표로 묶기

- CMD
D:\works\java\FirstJava\bin>java array.ArrayEx02 사과 바나나 "샤인 머스캣"
사과
바나나
사과 2
바나나 3
샤인 머스캣 6
향상된 for문
- 자료구조객체와 for문 사용하는경우, 성능에 좋은 영향을 준다.
for (String str:args) {
System.out.println(str);
System.out.println(str.length());
}
사과
2
멜론
2
몽키 바나나
6
로또 예제
- 풀이 방법
- 45크기의 int타입 배열 생성
- 배열을 1-45로 초기화
- 0-44중에서 랜덤한 숫자 하나 추출(방번호)
- 랜덤하게 뽑은 방번호에 들어있는 값을 0번째 방에 들어있는 값과 교환
- 1000번 반복
- 완성된 배열의 앞에서부터 6개 추출
public class Lotto {
public static void main(String[] args) {
int[] intArr = new int[45];
for (int i=0; i<intArr.length; i++) {
intArr[i] = i+1;
}
for (int i=0; i<1000; i++) {
int random = (int) (Math.random() * 44) + 1;
int first_num = intArr[0];
intArr[0] = intArr[random];
intArr[random] = first_num;
}
for (int i=0; i<6; i++) {
System.out.println(intArr[i]);
}
}
}
게임 만들기 연습
가위바위보 게임
import java.util.Scanner;
public class RSP {
public static void main(String[] args) {
String man;
String woman;
Scanner sc = null;
while (true) {
sc = new Scanner(System.in);
System.out.println("가위바위보중 하나를 입력: ");
System.out.println("하녕: ");
man = sc.nextLine();
System.out.println("유진: ");
woman = sc.nextLine();
if (man.equals(woman)) {
System.out.println("비겼습니다! 게임 재시작");
} else if (man.equals("가위") && woman.equals("바위") ||
man.equals("바위") && woman.equals("보") ||
man.equals("보") && woman.equals("가위")) {
System.out.println("유진 승리");
break;
} else {
System.out.println("하녕 승리");
break;
}
}
}
}
숫자 맞추기 게임
import java.util.Scanner;
public class NumberGame {
public static void main(String[] args) {
int answer = (int)(Math.random() * 100) + 1;
int input = 0;
int count = 0;
Scanner sc = new Scanner(System.in);
do {
count++;
System.out.println("1~100사이의 값을 입력하세요 : ");
input = sc.nextInt();
if (input == answer) {
System.out.println("정답!");
System.out.println("시도 횟수 : " + count);
break;
} else if (input < answer) {
System.out.println("up");
System.out.println("시도 횟수 : " + count);
continue;
} else if (input > answer) {
System.out.println("down");
System.out.println("시도 횟수 : " + count);
continue;
}
} while (true);
}
}
2차원 배열

배열 선언, 초기화
int a = 10;
int[] b = new int[5];
int[][] c = new int[3][2];
iny[][][] d = new int[2][3][4];
성적 처리 프로그램 예제
int[][] score = { { 90, 85, 65 }, { 20, 76, 100 }, { 30, 30, 30 }, { 40, 80, 90 }, { 100, 70, 58 } };
int korTotal = 0;
int engTotal = 0;
int mathTotal = 0;
System.out.println("번호\t국어\t영어\t수학\t총점\t평균");
System.out.println("============================================");
for (int i = 0; i < score.length; i++) {
korTotal += score[i][0];
engTotal += score[i][1];
mathTotal += score[i][2];
int sum = 0;
double avg = 0;
for (int j = 0; j < score[i].length; j++) {
sum += score[i][j];
}
avg = sum / score[i].length;
System.out.println(
(i + 1) + "\t" + score[i][0] + "\t" + score[i][1] + "\t" + score[i][2] + "\t" + sum + "\t" + avg);
}
System.out.println("=============================================");
System.out.println("총점\t" + korTotal + "\t" + engTotal + "\t" + mathTotal);