Bonfire
99클럽 스터디 13일차 TIL JAVA 자료형과 연산 본문
JAVA 자료형과 제어문
자료형
자료형의 선언
str B = "Hello"
- Call by value
- 값을 저장 ("HELLO")
- Call by Reference
- 위치를 저장 (B)
변수 이름 작성 유의사항
- 숫자로 시작 불가
- 특수문자는 $, _ 만 사용 가능
- 변수이름에 **$**만 주는 건 가능하나, **_**만 주는건 불가능
- 키워드 사용 불가
일반적으로 많이 쓰는 이름 작성시 대소문자
- Package, Webfile 같은 것은 소문자로 작성
- Class만 대문자로 시작하도록 작성
- 상수명을 작성시 전부 대문자로 작성, 단어를 여러개 결합시 가독성을 위해 밑줄을 사용.
변수의 생존 기간
- 변수는 선언된 시점에서 생성된다.
- 생성된 변수는 자신이 선언된 열린 중괄호{ 의 쌍인 닫힌 중괄호} 를 만나면 메모리에서 삭제된다.
자료형의 종류
- 기본 자료형
- 참조 자료형
목적에 따른 메모리의 영역
- 클래스,정적상수,메서드 영역
- 스택영역
- 변수들이 저장되는 공간.
- 힙 영역
- 객체들이 저장되는 공간
- 힙 메모리 영역은 반드시 참조 변수를 통해서만 접근 할 수 있다。
기본 자료형의 메모리 크기와 저장할 수 있는 값의 범위
- 실수는 오차가 기본적으로 있다.
- float의 정밀도는 대략 소수점 7자리 까지
- double의 정밀도는 소수점 15자리까지
- 자리수가 너무 길면 언더바로 구분해서 볼 수 있다.
float f1 = 1.000_000_1f;
System.out.println(f1);
// 1.0000001
float f2 = 1.000_000_01f;
System.out.println(f2);
// 1.0
double d1 = 1.000_000_000_000_001;
System.out.println(d1);
// 1.000000000000001
double d2 = 1.000_000_000_000_000_1;
System.out.println(d2);
// 1.0
기본 자료형 간의 타입 변환
자료형의 크기
⭐ byte<short/char<int<long<float<double
- byte의 크기가 아닌 값의 표현범위가 넓은 것을 큰 것으로 인식
자동 타입 변환과 수동타입변환(강제타입변환)
- 업캐스팅
- 크기가 작은 자료형을 큰 자료형에 대입
- 어떠한 손실도 발생하지 않아 개발자가 타입 변환 코드를 넣지 않아도 컴파일러가 자동으로 타입변환을 실행하는데, 이를 ‘자동타입변환’이라고 부른다.
byte value = (byte)128
//-128
128을 입력 받을떄는 자동으로 int형으로 변환하여 표시
00000000 00000000 00000000 10_000_000
byte로 형변환시
10_000_000
이 값의 보수 01_111_111+1
10_000_000 = -128 (byte의 범위가 -128~127 이기 떄문)
연산자(Operator)
연산자의 종류
- 비교 연산자
- [ >, < , ≥ , ≤ , == , ≠]
- 산술 연산자
- [ + , - , * , / , % ]
- 논리 연산자
- AND, OR, NOT
- 증감 연산자
- [ ++ , - - ]
- 복합대입 연산자
- Scanner sc = new Scanner(System.in); System.out.print("입력하세요 : "); int n=sc.nextInt(); System.out.println(n==1 || n==3 ? "남자입니다." : n==2 || n==4 ? "여자입니다.": "에러입니다"); sc.close();
- 삼항 연산자
System.out.println(value3 % 2 ==0 ? "짝수" : "홀수");
시프트 연산자
- 산술 시프트
- 는 2로 나눈 것과 같다. 양수였다면 소수는 버리고, 음수였다면 소수를 올림한다.
- <<는 2를 곱한 것과 같다.
System.out.println(5>>2);
00000101 -> 00000001
- 논리 시프트
- 는 부호비트도 함께 움직이므로 음수값이 양수가 되기도 한다.
※ 쇼트 서킷
- 논리 연산자와 비트 연산자의 결과는 항상 같다.
- 둘 사이의 차이점은 논리연산자의 경우에는 판정이 끝났을떄 뒤의 연산을 진행하지 않지만, 비트연산자는 모든 연산을 수행한다는 차이점이 있다.
int value1 = 3;
System.out.println(false && ++value1 > 6); // ++ value1>6 수행 x
System.out.println(value1);
int value2 = 3;
System.out.println(false & ++value2 > 6); // ++ value1>6 수행 o
System.out.println(value2);
int value3 = 3;
System.out.println(false || ++value3 > 6); // ++ value1>6 수행 x
System.out.println(value3);
int value4 = 3;
System.out.println(false | ++value4 > 6); // ++ value1>6 수행 o
System.out.println(value4);
Scanner 패키지
- 입력을 받을때 사용
- sc.close()를 꼭 써서 닫아주기. (sc는 스캐너 인스턴스)
제어문
- 조건문
- if~else
오늘의 회고
JAVA를 공부하면서, 파이썬만 배웟던 나는 생각보다 JAVA가 디테일한 언어라고 생각했다.
Python을 사용할때는 알아서 할당하는 자동이었다면, JAvA는 수동 느낌의 언어였다.
대신 수동인 만큼 더 최적화된 메모리 사용 등 다른 장점도 많은 것 같다.
'알고리즘 > 99 코테 스터디' 카테고리의 다른 글
99클럽 코테 스터디 15일차 TIL 프로그래머스 가장 먼 노드 (1) | 2024.06.13 |
---|---|
99클럽 코테 스터디 14일차 TIL Leetcode K-th Smallest Prime Fraction (0) | 2024.06.12 |
99클럽 코테 스터디 12일차 TIL 프로그래머스 도둑질 (0) | 2024.06.09 |
99클럽 스터디 11일차 TIL JAVA 공부 (0) | 2024.06.09 |
99클럽 코테 스터디 10일차 TIL 프로그래머스 정수 삼각형 (1) | 2024.06.07 |