[TIL] Java 1일차 2

minami·2021년 1월 28일
0

Java

목록 보기
2/11

아무래도 수업시간이 9 to 6 풀타임이라 하루에 배우는 양이 어마어마한 나머지 TIL조차 나눠서 써야 하는 현실...(그럼 TIL이 아니지 않나) 아무튼 기본 개념부터 시작해서 이론적인 것을 배워가다 보니 양은 많지만 변수나 데이터 타입, 연산자 등은 기존에 이미 내가 배운 C언어, Python 등 다른 프로그래밍 언어에서도 약간의 차이만 있을 뿐 거의 알고 있던 것이라서 별로 어렵진 않았다. 그래서 이번에는 TIL에 충실하게도 내가 몰랐거나 헷갈렸는데 이번에 개념을 바로잡게 된 것들만 짚어서 정리해보기로 했다.

💡 변수와 데이터 타입

1. 변수

변수란?
👉 하나의 값을 저장할 수 있는 메모리 공간

📌 변수의 작성 규칙

1. 첫 번째 글자

  • 가능🙆‍♀️ : 문자, '$', '_'
  • 불가능🙅‍♀️ : 숫자
  • 관례상 영어 소문자로 시작하되 뒤에 다른 단어가 붙을 경우 그 단어의 첫 글자는 대문자로 시작

2. 문자

  • 대소문자가 구별되므로 같은 단어라도 대소문자가 다르면 다른 변수
  • 문자의 길이 제한 없음
  • 자바 예약어는 사용 불가

❗ 리터럴(Literal)

: 대부분 변수를 선언할 때는 초기값을 직접 코드로 입력해 준다. 그때 직접 입력한 값을 리터럴이라고 부른다.

리터럴의 종류
1. 정수 리터럴
2. 실수 리터럴
3. 문자 리터럴 (작은 따옴표('')로 묶은 텍스트)
4. 문자열 리터럴 (큰 따옴표("")로 묶은 텍스트)
5. 논리 리터럴 (true, false)

2. 데이터 타입

기본 타입

❗ 자바에서는 float를 사용할 때 f 또는 F를 뒤에 꼭 붙여줘야 한다!

float x = 30F
float y = 32f

타입 변환

타입 변환이란?
👉 데이터 타입을 다른 타입으로 변환하는 것

1. 자동(묵시적) 타입 변환

// int(4byte) <- byte(1byte)
int n = b;

2. 강제(명시적) 타입 변환

// byte(3byte) <- int(4byte)
int i = 10;
byte b = (byte)i;

3. 연산식 타입 변환: 같은 타입의 피연산자 간에만 수행

int nval = 10;
double dval = 15.5;
double res = nval+dval;  // 보통 int+double은 double로
int nres1 = nval+(int)dval;  // int로 사용하고 싶다면1
int nres2 = (int)(nval+dval);  // int로 사용하고 싶다면2

int k = 70, e = 85, m = 98;
double avg = (k+e+m)/3.0;  // k,e,m이 정수라서 소숫점이 나오게 하려면 3.0으로
System.out.println(avg);

💡 연산자

연산자란?
👉 연산에 사용되는 표시나 기호

피연산자란?
👉 연산되는 데이터

1. 연산 방향과 우선순위

기본적인 연산 방향과 우선순위

  • 대부분의 경우 왼쪽에서 오른쪽!
  • 곱셈&나눗셈이 덧셈&뺄셈보다 먼저!

우선순위가 같은 경우?

100 * 2 / 4 % 5 👉 왼쪽에서 오른쪽으로 (일반 산술식처럼)

a = b = c = 1 👉 오른쪽에서 왼쪽으로 (증감, 부호, 대입 연산자)

2. 연산자의 종류

단항 연산자

👉 피연산자가 하나뿐인 연산자

단항 연산자의 종류

  • 부호 연산자(+, -)
  • 증감 연산자(++, --)
  • 논리 부정 연산자(!)
  • 비트 반전 연산자(~)

📌 비트 반전 연산자(~)

  • 비트 반전 연산자는 정수 타입 피연산자에만 사용한다
  • 피연산자를 2진수로 표현했을 때 0을 1로, 1을 0으로 반전시킨다!
byte n1 = 10;  // 10은 2진수로 하면 00001010
int n2 = ~n1;  // 10의 비트를 반전하면 11110101이 되어서 값이 -11이 된다!

이항 연산자

👉 피연산자가 2개인 연산자

이항 연산자의 종류

  • 산술 연산자(+, -, *, /, %): boolean제외 모든 기본 타입에 사용 가능, overflow 주의
  • 문자열 연결 연산자(+): 피연산자 중 문자열이 있으면 문자열(String)로 결합
  • 비교 연산자(<, <=, >, >=, ==, !=)
  • 논리 연산자(&&, ||, &, |, ^, !)

📌 산술 연산 오버플로우(Overflow)

연산을 할 때 사용한 타입으로 표현할 수 없는 값을 얻게 되면 쓰레기값을 얻게 되는데, 이렇게 되는 경우를 오버플로우라고 한다!

int a = 1000000;
int b = 1000000;
int c = a * b;  // c값은 int가 표현할 수 있는 값 범위를 넘어서 쓰레기값을 얻게 된다

📌 논리 연산자 中 비트 이동 연산자(<<, >>, >>>)

  • a << b : 정수 a의 비트를 b만큼 왼쪽으로 이동(빈자리는 0으로 채워진다)
  • a >> b : 정수 a의 비트를 b만큼 오른쪽으로 이동(빈자리는 정수 a의 최상위 부호 비트와 같은 값으로 채워진다)
  • a >>> b : 정수 a의 각 비트를 오른쪽으로 이동(빈자리는 0으로 채워진다)
byte b5 = 10;
System.out.println(b5 >> 1);  // b5: 00001010 👉 00000101: 5
byte b6 = -11;
System.out.println(b6 >> 1);  // b6: 11110101 👉 11111010: -6
			      //(음수는 맨 앞자리가 0이 되면 1로 채워준다)
System.out.println(b6 >>> 1);  // b6: 11110101 👉 01111010: 2147483642
byte b7 = 10;
System.out.println(b7 << 1);  // b7: 00001010 👉 00010100: 20

삼항 연산자

👉 피연산자가 3개인 연산자. 조건 연산식이라고도 부른다.

📌 형태: 조건식? 식1:식2;

int score = 95;
char grade;
grade = (score > 70)? 'P':'F';
System.out.println(grade);

// 위의 조건 연산식은 아래 if문과 똑같이 사용 가능하지만 if문보다 조건 연산식 속도가 더 빠르다!
if (score>70) {
	grade = 'P';
} else {
	grade = 'F';
}

🐍 뱀발

위에서 썼듯이 프로그래밍 언어에서의 기본적인 개념들은 거의 통용이기 때문에 문법만 조금씩 다른 수준이라고 생각했는데 수업 내용을 다시 정리하면서 살펴보니 생각보다 헷갈려하는 부분이 좀 있었다. 자바에서만 써본 연산자도 있고. 수업 내용 전체를 다 정리하는 건 너무 양도 많고 해서(고등학생 때 7교시 할 때에도 이렇게 꽉꽉 시간을 채워서 한 것 같진 않은데🤔) 최대한 내가 잘 몰랐던 부분만 정리를 한다고 했는데도 뭔가 시간이 오래 걸리는 것 같기도 하다.. 그리고 얼른 이론적인 것 끝내버리고 싶기도 한데 언제쯤 그렇게 될려나.

profile
함께 나아가는 개발자💪

0개의 댓글