Doit ! Java_1

박다현·2023년 9월 18일
0

likelion

목록 보기
19/23
post-thumbnail

01 자료형


1. 변수와 자료형

1.1 자료형 선언하기

변수
메모리 공간에 부여하는 이름

자료형
데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징 다르게 생성

# 자료형 선언 방법

자료형 변수명;
ex) int a; 

주의할 점

  • 자료형은 반드시 사용하기 전에 선언
  • 자료형은 반드시 한 번만 선언

1.2 변수 사용하기

# 변수 선언과 값 대입하기

자료형 변수명 = 값;
ex) int a = 3;

# 변수 선언과 값 대입 분리하기

자료형 변수명;
변수명 = 값;
ex) 
int a; // a 라는 이름의 공간만 생성
a = 3;

2.이름 짓기

2.1 필수사항

  • 영문 대소 문자와 한글 사용 가능
  • 특수 문자는 밑줄(_) 과 $ 표기만 사용 가능
  • 아라비아 숫자 사용 가능 but 첫 글자로 사용 불가능
  • 자바에서 사용하는 예약어 사용 불가능

2.2 권장사항

  1. 변수명 : 낙타 표기법 camel case
int ourClassNum;

- 영문 소문자로 시작
- 영문 단어 2개 이상 결합할 시, 새로운 단어의 첫 글자 대문자 사용
- 메서드명 권장사항과 동일
  메서드는 이름 뒤에 소괄호와 중괄호가 붙음
  1. 상수명
final int MY_DATA;

- 변수와 구분하기 위해 모두 대문자로 표기
- 단어가 여러 개 결합하면 가독성이 떨어지므로 밑줄을 사용해 분리

2.3 변수 생존 기간

변수 생성은 개발자가 직접 생성하지만 메모리에서 변수를 삭제하는 작업은 JVM 이 알아서 진행

자신이 열린 중괄호의 쌍인 닫힌 중괄호를 만나면 메모리에서 삭제

{
	int a; // 변수 a 의 생성 시점
    {
    	a = 3;
    } 
} // 변수 a 의 소멸 시점

3. 자료형의 종류

3.1

자료형의 크기
byte < short < char < int < long < float < double
자료형이 크다 작다의 의미는 자료형의 바이트 크기가 아니라 저장하는 값의 범위를 말하는 것

똑같은 정수를 저장하는데 자료형이 4개나 필요한 이유 > 메모리의 효율성

p63

자료형을 구분해야 하는 이유
기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문

첫 번째 영역 : 클래스 영역 / 정적 영역 / 상수 영역 / 메서드 영역
두 번째 영역 : 스택 영역 ( 변수들이 저장되는 공간 )
세 번째 영역 : 힙 영역 ( 객체들이 저장되는 공간 )

3.2 기본 자료형과 참조 자료형의 차이

  • 자료형의 이름 규칙
기본 자료형 : 소문자로 시작
참조 자료형 : 대문자로 시작
  • 실제 데이터 값의 저장 위치
기본 자료형 : 스택 메모리에 생성된 공간에 실제 변숫값을 저장
참조 자료형 : 실제 데이터값은 힙 메모리에 저장하고 스택 메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값 저장

4.기본 자료형 간의 타입 변환

4.1 캐스팅

  • Upcasting 자동 타입 변환
    크기가 작은 자료형을 큰 자료형에 대입 할 때
    컴파일러가 자동으로 타입 변환 실행

  • Downcasting 수동 타입 변환
    크기가 큰 자료형을 작은 자료형에 대입 할 때
    데이터의 손실이 발생할 수 있으므로 컴파일러에 따른 자동 타입 변환은 일어나지 않으며 개발자가 직접 명시적으로 타입 변환을 수행해야 함

float value1 = 3; // int > float (Upcasting)
byte value2 = (byte)128; // int > byte (Downcasting)

정수형 자료형을 작은 범위의 자요형으로 캐스팅할 때는 범위의 반대쪽 끝에서부터 다시 시작하는 서큘러 구조를 보임
정숫값 128(127+1) 을 byte 자료형을 다운캐스팅 하면 byte 자료형의 범위에서 반대쪽 끝인 정숫값 -128로 변환

byte a = (byte)128; // -128
byte b = (byte)129; // -127
byte c = (byte) -129; // 127
byte d = (byte) -130; // 126

4.2 기본 자료형 간의 연산

CPU 에서 연산 최소 단위가 int 이므로 int 보다 작은 자료형도 일단 int 로 읽어 와서 연산을 수행함
int 보다 작은 자료형 간의 연산은 int, int 보다 크거나 같은 자료형 간의 연산은 해당 자료형이 나온다고 생각하면 된다

  • byte + byte = int
  • short + short = int
  • int + int = int
  • long + long = long
  • float + float =float
  • double + double = double
  • byte + short = int
  • byte + int = int
  • short + long = long
  • int + float = float
  • long + float = float
  • float + double = double


02 연산자


1. 연산자의 종류

1.1 값

  • 산술 연산자
연산 기호 : +, -, *, /, %
기능 : 사칙연산 및 나머지 연산
  • 증감 연산자
연산 기호 : ++, --
기능 : 값이 1씩 증가 및 감소
  • 비트 연산자
연산 기호 : &, |, ~, ^
기능 : 비트 AND, OR, NOT, XOR
  • 시프트 연산자
연산 기호 : >>, <<, >>>
기능 : 비트 단위의 이동

1.2 참 true / 거짓 false

  • 비교 연산자
연산 기호 : <, >, <=, >=, ==, !=
기능 : 값의 크기 비교
  • 논리 연산자
연산 기호 : +&&, ||, !, ^
기능 : 논리 AND, OR, NOT, XOR

변숫값의 범위를 지정할 때 수학식에서는 70 <= a < 80 과 같이 표현할 수 있지만,
자바 코드에서는 반드시 각각을 분리하고 논리 연산자로 연결 : a >= 70 && a < 80

1.3 실행

  • 대입 연산자
연산 기호 : =, +=, -=, *=, /=, &=, |=, >>=, <<=, >>>=
기능 : 산술 연산 결과의 대입 ('연산자' + '=' 의 축약 표현)
  • 삼항 연산자
연산 기호 : (참 또는 거짓) ? x:y
기능 : 참일 때 x, 거짓일 때 y

연산 결과를 기준으로 나누어 정리한 것


2. 연산자의 연산 방법

2.1 산술 연산자와 증감 연산자

  • 산술 연산자
    산술 연산자에서 나누기를 진행할 때 int/int = int
    5/2 의 값은 2.5가 아니라 2인 것

  • 증감 연산자

int a = 3;
++a; // a 값에 1을 더하라는 명령 1개 (전위형, 후위형 차이 X)
System.out.println(a);
int a1 = 3;
int b1 = ++a1; // a1 값에 1을 더하기 (전위형) > a1 값을 b1 값에 대입
System.out.println(a1); // 4
System.out.println(b1); // 4

int a2 = 3;
int b2 = a2++; // a2 값을 b2 값에 대입 > a2 값에 1을 더하기 (후위형)
System.out.println(a2); // 4
System.out.println(b2); // 3

2.2 비트 연산자

AND & 두 값이 모두 1일 때만 1인 연산자
OR | 두 값이 모두 0일 때만 0인 연산자
XOR ^ 두 값이 같을 때 0 , 두 값이 다를 때 1
NOT ~ 0은 1, 1은 0으로 반전하는 연산자

# AND 연산자 ex

   00000011 > 3 (10진수)
&  00001010 > 10 (10진수)
---------------------------
   00000010 > 2 (10진수)
# NOT 연산자 ex
값의 첫 번째 비트는 부호 비트 0 : 양수 / 1 : 음수
TIP ; 음수 연산은 양수를 기준으로 읽은 후 1 더한 다음 부호만 음수 부호를 붙여주면 됨

~ 00000011 > 3
----------------
  11111100 > -4
  
TIP ; 음수 연산은 양수를 기준으로 읽은 후 1 더한 다음 부호만 음수 부호를 붙여주면 됨

2.3 시프트 연산자

  • 산술 시프트
    숫자의 부호 비트는 유지하면셔 나머지 비트를 왼쪽 (<<) 또는 오른쪽 (>>) 으로 이동하는 연산자
  • 논리 시프트
    부호 비트를 포함해 전체 비트를 오른쪽으로 이동시키는 연산
    빈칸은 모두 0으로 채움
    부호 비트까지 이동시키므로 부호 비트가 1인 음수일 때 논리 시프트 이후에는 값이 양수로 변할 것

Do it ! 자바 완전 정복 p 93 참조

2.4 비교 연산자

  • 크기 비교 (>, <, >=, <=)
  • 등가 비교 (==, !=)
- 등가 비교에서 같다 == 는 등호가 2개 있다는 것에 유의할 것
  두 값이 동일한지의 여부를 확인한 후 동일 여부를 참 (true) 거짓 (false) 로 반환하는 연산자
- 등가 비교에서 비교 대상은 스택 메모리의 값을 비교하는 것 
> 기본 자료형의 등가 비교 대상은 실제 데이터값이 되고 
  참조 자료형의 등가 비교 대상은 실제 데이터값이 위치한 번짓값이 되는 것
- 등호는 항상 오른쪽에 위치

2.5 논리 연산자

비트 연산자와 매우 비슷하지만 피연산자로 boolean 값 true / false 값만 올 수 있음

Do it ! 자바 완전 정복 p 98 참조

비트 연산자와 거의 유사하므로 별도로 찾아볼 것 

2.6 대입 연산자

오른쪽 피연산자의 연산 결과를 왼쪽 변수 결과에 대입하는 연산자

a = a+b  > a += b
a = a-b  > a -= b

2.7 삼항 연산자

유일하게 3개의 피연산자가 있는 연산자

(참 또는 거짓) ? 참일 때 연산 결과 : 거짓일 때 연산 결과

int a = (true) ? 1: 2;
System.out.println(a); // 1

int b = (a % 2 == 0) ? 10 : 20;
System.out.println(b); // 20
삼항 연산자와 if 선택 제어문 사이의 변환

# 삼항 연산자를 이용한 표현
int a = 3;
int b = (a > 5) ? 10 : 20;
System.out.prinln(b); // 20

# if 선택 제어문을 이용한 표현
int a = 3;
int b;
if (a > 5) {
	b = 10;
} else {
	b = 20;
}
System.out.println(b); // 20


간단히 연산자에 대한 기본적인 것을 정리한 것이고 이후에 코딩 테스트나 예제 문제 풀이를 하며 보다 심도있는 스터디를 진행하는 것 권유


0개의 댓글