본문 바로가기
Java

1. 자바 기본 익히기

by yukuda 2024. 2. 21.
728x90

프로그래밍이란 무엇일까?

프로그래밍 : 컴퓨터에게 일을 하도록 명령어를 만드는 것

컴파일 : 프로그램 언어를 컴퓨터가 알 수 있는 언어로 바꿔 주는 일

컴파일러 : 기계어로 번역해주는 프로그램 , 자바를 설치하면 자바 컴파일러도 설치 됨

  • JRE는 JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
  • JDK는 개발을 위해 필요한 도구(javac, java 등)들을 포함한다.
  • JDK = JRE + @
  • JRE는 읽기 전용, JDK 읽기 / 쓰기 전용이라 생각할 수 있다.

컴퓨터에서 데이터 표현하기

컴퓨터는 0과 1로만 데이터를 저장 함

bit(비트) : 컴퓨터가 표현하는 데이터의 최소 단위로 2진수 하나의 값을 저장할 수 있는 메모리의 크기

1byte = 8bit

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

음의 정수는 어떻게 표현할까?

정수의 가장 왼쪽에 존재하는 비트는 부호비트 입니다.

음수를 만드는 방법은 2의 보수를 취한다.

00000101 → 11111010(1의 보수를 취함) → 11111011(1을 더함)

변수

프로그래밍에서 값을 사용하기 위해 선언하는 것

프로그램에서 사용되는 자료를 저장하기 위한 공간

할당 받은 메모리의 주소 대신 부르는 이름

프로그램 실행 중에 값 변경 가능

사용되기 이전에 선언 되어야 한다.

숫자로 시작할 수 없음, 키워드도 불가능

상수

상수 : 변하지 않는 값 ( cf 변수 : 변하는 값)

상수를 선언 : final 키워드 사용

final double PI = 3.14;
final int MAX_NUM = 100;

final 로 선언된 상수는 다른 값을 대입 할 수 없음

PI = 3.15; // 에러 남

프로그램 내에서 변경되지 말아야 하는 값을 상수로 선언 해 두고 혹시 변경되는 경우 선언된 값만 수정

리터럴

리터럴 : 프로그램에서 사용하는 모든 숫자, 값, 논리 값

ex) 10, 3.14, 'A', true

리터럴에 해당하는 값은 특정 메모리 공간인 상수 풀에 있음

필요한 경우 상수 풀에서 가져와서 사용

상수 풀에 저장 할 때 정수는 int로 실수는 double로 저장

따라서 long이나 float 값으로 저장해야 하는 경우 식별자 (L, I, F, f)를 명시해야 함

형 변환

서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어 남

묵시적 형변환 : 작은 수에서 큰 수로 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우

ex) long num = 3; // int값에서 long으로 자동 형 변환

// L, I 을 명시하지 않아도 됨

명시적 형 변환 : 묵시적 형 변환의 반대의 경우

변환되는 자료 형을 명시해야 함, 자료의 소신일 발생 할 수 있음

ex) double dNum = 3.14;

int num = (int)dNum; //자료형 명시

항과 연산자

항 : 연산에 사용되는 값

연산자 : 항을 이용하여 연산하는 기호

대입 연산자

변수에 값을 대입 하는 연산자

int age = 24;

totalScore = mathScore + engScore;

부호 연산자

int num = 10;

int num2 = -num;

산술 연산자

사칙연산에 사용되는 연산자

+, -, *, /, %

증가 감소 연산자

++, - -

관계 연산자

, <, > =, < =, ==, ! =

연산의 결과가 true, false으로 반환됨

논리 연산자

&&(논리 곱), ||(논리 합), !(부정)

&& : 두 항이 모두 참이여야 결과 참

|| : 두 항 중 하나의 항만 참이면 결과 참

! : 참은 거짓, 거짓은 참

복합 대입 연산자

+=, -=, *=, /=, %=

조건 연산자

삼항 연산자

조건식 ? 결과1 : 결과2

조건식이 참이면 결과1 거짓이면 결과2

int num = (5 > 3) ? 10 : 20;

비트 연산자

비트 연산자는 정수에만 사용할 수 있다

&(and) 연산자 : 두 비트가 모두 1인 경우만 1 아님 0

int num1 =5;
int num2 = 10;
int result = num1 & num2;
num1 : 0 0 0 0 0 1 0 1

& num2 : 0 0 0 0 1 0 1 0

result : 0 0 0 0 0 0 0 0 

—————————————-

| (or)연산자 : 두 비트가 모두 0인 경우만 0 아님 1

int num1 =5;
int num2 = 10;
int result = num1 | num2;
num1 : 0 0 0 0 0 1 0 1

| num2 : 0 0 0 0 1 0 1 0

result : 0 0 0 0 1 1 1 1

<<(왼쪽 shift) : 비트를 왼쪽에서 오른쪽으로 이동하는 연산자

(오른쪽 shift) : 비트를 오른쪽에서 왼쪽으로 이동하는 연산자

<<<,>>> : shift 로 비트이동은 동일한데, 남은 공간을 무조건 부호비트가 아닌 0으로 채움

ex) 15 << 2

00000000 00000000 00000000 00001111

00000000 00000000 00000000 0000111100 → 결과 : 60 →15 * 2^2

조건문

if 문, if-else문

if(age >= 8){
System.out.println("학교에 다닙니다");
}
else{
System.out.println("학교에 다니지 않습니다");
}
if(a > b){
	max = a;
}
else {
	max = b;
}

=>

max = (a > b) ? a : b;

switch-case문

switch(rank) {
	case 1: medalcolor = 'G';
					break;
	case 2: medalcolor = 'S';
					break;
	case 3: medalcolor = 'B';
					break;
	default : color = 'A';
}
int month = 12;
int day;

switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31;
break;
case 2: 
day = 28;
break;
case 4: case 6: case 9: case 11:
day = 30;
break;
default:
break;
}
System.out.println(month + "월은 " + day +"일까지 있습니다");

반복문

while, do-while, for

while 문

int num = 1;
int sum = 0;
while (num <= 10) {
	sum += num;
	num++;
}
sysout("1부터 10까지의 합은 " + sum + "입니다.");

do-while 문

조건 체크를 마지막에 하기 때문에 반드시 한번은 수행한다.

int num = 1;
int sum = 0;
do{
	sum += num;
	num++;
}while(num <= 10)
sysout("1부터 10까지의 합은 " + sum + "입니다.");

for 문

int sum = 0;
for(int num = 1; num <= 10; num++){
	sum += num;
}
sysout("1부터 10까지의 합은 " + sum + "입니다.");
for( ; ; )
=> while(true) (무한루프 돌아라)

이중 for문 (구구단)

int dan;
int times;
for(dan = 2; dan <= 9; dan++){
	for(times = 1; times <= 9; times++){
		sysout(dan + " X " + times + " = " + dan*times);
	}
	sysout();
}

continue 문

반복문과 함께 쓰이며, 반복문 내부 continue 문을 만나면 이후 반복되는 부분을 수행하지 않고 조건식이나 증감식을 수행함

ex) 1부터 100까지 중 홀수만 더하는 예

int total = 0;
int num;

for(num = 1; num <=100; num++){
	if((num % 2) == 0)
		continue;
	total += num;
}
sysout(total);

break 문

반복을 수행하지 말고 빠져나와라

ex) 계속 더하다가 sum이 100보다 크면 빠져나와라

int sum = 0;
int num = 1;

while(true){
	sum += num;
	if(sum > 100)
		break;
	num++;
}
sysout("sum : " + sum);
sysout("num : " + num);

https://www.youtube.com/watch?v=oonYQa82MU4&list=PLG7te9eYUi7typZrH4fqXvs4E22ZFn1Nj