25.03.23 커널아카데미 백엔드 개발자 과정이 시작되었다. 벌써 금요일인거 보니 이번주 열심히 공부한 것 같다. 다음주부터 아침 9시부터 저녁 10시까지 공부하려고 하는데, 이 계획이 앞으로의 6개월 동안 지속될 수 있을지는 모르겠지만, 일단 가보자고!
1) 프로그램
💡Pro(미리) + gram(쓴다)으로 컴퓨터에게 미리 행동 명령을 내리는 것을 말한다.
2) 객체지향(OOP)
💡객체지향은 규칙을 추구하는 프로그래밍이며, 객제지향에서의 핵심요소는 (1) 그룹화, (2) 관계이다.
3) 변수
💡변수는 (1) 저장공간 생성 (2) 쓰기 (3) 읽기 이 3가지를 수행한다.
4) 인코딩
💡 (1) 코드를 바꾸다. (2) 문자표
(1) 대소문자가 구분되며 길이에 제한이 없다.
(2) 예약어(keyword, reserved word)를 사용해서는 안 된다.
(3) 숫자로 시작해서는 안 된다.
(4) 특수문자는 '_' '$' 만 허용한다.
저장 공간의 Type은 값에 따라 변경된다. 값은 문자와 숫자로 나뉘며, 숫자는 정수와 실수로 나뉜다. 💡문자는 정수로 치환되어 저장되기 때문에 실질적으로 값의 저장방식은 정수와 실수이다.
자료형은 기본형과 참조형으로 나뉜다
자료형 | 저장 가능 한 값의 범위 | 크기 (byte) | 정밀도 |
---|---|---|---|
boolean | false, true | 1 | |
char | '\u0000'~'\uffff' (0~65535) | 2 | |
byte | -128 ~ 127 | 1 | |
short | -32,768 ~ 32,767 | 2 | |
int | -20억 ~ 20억 | 4 | |
long | -900경 ~ 900경 | 8 | |
float | ± 1.4E-45 ~ 3.4E38 | 4 | 7 자리 |
double | ± 4.9E-324 ~ 1.8E308 | 8 | 15자리 |
cf) 기본형 변수인 double은 float보다 정밀도가 2배라서 double이라는 이름이 붙여졌다.
int 형 보다 작은 타입(byte, char, short)은 int형으로 변환한 후에 연산이 진행된다.
cf) 요즘은 변수보다 상수를 많이 사용하려고 한다.
- 하드웨어의 성능이 비약적으로 발전되어 과거에는 선형적인 과정으로 프로세스를 처리했다면, 현재는 cpu가 멀티코어로 변경되어 동시에 프로세스를 처리가능하여 변수를 사용할 필요가 없게 되었다.
- 상수를 계속 쓰게 되면 상수를 저장할 공간이 필요해졌는데, 과거에 비해 현재는 RAM 메모리가 1G => 64G로 6만배 이상 증가하게 되어 괜찮아졌다.
1) 원래 오차 - 이미 값 자체가 가지고 있음 ex) 1/3, 루트 2
2) 10진수 실수를 2진수 실수로 나눌때 오차 발생
3) 저장공간의 한계: ex) 1.2345678910인데 저장공간이 8자리면 뒤의 값은 날아가 오차 발생
cf) 언더플로우는 실수 0근처 부근에서 발생한다.
ex) 1 + 3.5f = float + float 형태로 바꾸어 계산해야 한다.
형변환의 종류 - (1) 큰정수와 작은정수끼리 변환 (2) 큰 실수와 작은 실수끼리 변환 (3) 정수와 실수 변환
연산자란? 계산을 수행하고 결과를 반환하는 기호이다.
=> 모든 연산자는 반드시 결과를 반환해야 한다. -> 이말은 결과를 주지 않으면 연산자가 아니다.
ex) ( ) : 괄호는 연산자가 아니다. (값을 반환하지 않기 때문에 / 일부 언어에서는 괄호를 연산자로 포함시키려고 노력함)
a. 계산 연산자(산술 연산자) + - * / %
b. 비교 연산자 >,< : 어떻게 값이 큰지 작은지 판단할 수 있냐? -> 비교하는 것 자체가 뺄셈이다.
c. 논리 연산자 && || ! (0은 거짓, 1은 참)
x | y | or | and |
---|---|---|---|
0(F) | 0(F) | 0(F) | 0(F) |
0(F) | 1(T) | 1(T) | 0(F) |
1(T) | 0(F) | 1(T) | 0(F) |
1(T) | 1(T) | 1(T) | 1(T) |
d. 대입 연산자 or 대입문 '=' (수학에서는 항등함수)
ex) x = 5; 입력값: 5 결과값: 5
=> ex1에서의 대입연산자의 역할
(1) 5를 W(쓰기)
(2) 5를 반환
e. 증감 연산자
ex) i++ // (1) 쓰기 (2) 덧셈
i+1 // (1) 덧셈
혼자 쓰였을 때는 i++ = ++i
<전위형> <후위형>
j = ++i; j = i++;
=> ++i; => j = i;
j = i; i++;
f. 비트 연산자
2진수 연산을 말하며, 10진수 연산보다 처리속도가 빠르다.
컴퓨터는 좌,우항의 타입이 같아야 계산 가능하다.
a. 우선순위 b. 결합규칙 c. 산술변환(중요)
ex) int i = 10;
float f = 20.0f;
float result = f + (float)i; // 형변환을 자동으로 타입 일치
1) 두 피연산자의 타입을 같게 일치 시킨다. (보다 큰 타입으로 일치)
long + int => long + long => long
float + int => float + float => float
2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
int / int -> int
ex) int 5 / int 2 => int 2
int / (float) int
ex) 5/(float) 2 => 5 / 2.0f
float / float -> float
ex) 5.0f / 2.0f -> 2.5f
cf) float과 double 값을 비교할때는 float으로 바꿔서 비교해야 한다. 정밀도가 다르기 때문에 꼭 변경해야 한다.
조건문: if(조건식) // 0~1번 동작하며 발전하면 switch문!
반복문: while(조건식) // 0~n번 동작하며 발전하면 for문!
조건이 1개인 경우 if문을 사용한다.
if문은 중첩으로 사용이 가능하다.
조건식이 True인 경우 A 실행
조건식이 False인 경우 B 실행
if( 조건식 ) {
실행문A
}
실행문B
if문을 간단하게 만드는 식: 삼항연산자 (조건식 ? 식1: 식2)
조건식이 True인 경우, A를 실행 후 C를 실행한다.
조건식이 False인 경우, B를 실행 후 C를 실행한다.
if ( 조건식 ) {
실행문A
} else {
실행문B
}
실행문C
조건식이 여러개 일 경우 사용한다.
조건식1이 True일 경우 A를 실행 후 D를 실행
조건식1이 False일 경우 조건식2로 이동한후 조건식2가 True이면 B를 실행 후 D를 실행
조건식2도 False인 경우 C를 실행 후에 D를 실행
if ( 조건식1 ) {
실행문A
} else if (조건식2) {
실행문B
} else {
실행문C
}
실행문D
if문은 조건이 많아질수록 else-if문을 통해 계속해서 추가해야 하므로 코드의 길이가 길어질 수 밖에 없는데, switch문은 if문 보다 코드가 간결하여 쉽게 코드를 읽을 수 있다.
변수가 값1인 경우 A를 실행
변수가 값2인 경우 B를 실행
변수가 값1, 값2가 아닌 경우 C를 실행
switch ( 변수 ) {
case 값1: 실행문A
break;
case 값2: 실행문B
break;
default:
실행문C
}
for(초기화식; 조건식; 증감식); // 조건식이 참일 경우에 계속해서 반복
while(조건식) {
증감식; // 조건식이 참일 경우에만 반복, 조건식이 거짓이면 문장전체를 벗어난다.
}