Bonfire

99클럽 스터디 13일차 TIL JAVA 자료형과 연산 본문

알고리즘/99 코테 스터디

99클럽 스터디 13일차 TIL JAVA 자료형과 연산

pecan 2024. 6. 11. 07:13

JAVA 자료형과 제어문

자료형

자료형의 선언

str B = "Hello"
  • Call by value
    • 값을 저장 ("HELLO")
  • Call by Reference
    • 위치를 저장 (B)

변수 이름 작성 유의사항

  1. 숫자로 시작 불가
  2. 특수문자는 $, _ 만 사용 가능
    • 변수이름에 **$**만 주는 건 가능하나, **_**만 주는건 불가능
  3. 키워드 사용 불가

일반적으로 많이 쓰는 이름 작성시 대소문자

  • Package, Webfile 같은 것은 소문자로 작성
  • Class만 대문자로 시작하도록 작성
  • 상수명을 작성시 전부 대문자로 작성, 단어를 여러개 결합시 가독성을 위해 밑줄을 사용.

변수의 생존 기간

  • 변수는 선언된 시점에서 생성된다.
  • 생성된 변수는 자신이 선언된 열린 중괄호{ 의 쌍인 닫힌 중괄호} 를 만나면 메모리에서 삭제된다.

자료형의 종류

  • 기본 자료형
  • 참조 자료형

목적에 따른 메모리의 영역

  1. 클래스,정적상수,메서드 영역
  2. 스택영역
    • 변수들이 저장되는 공간.
  3. 힙 영역
    • 객체들이 저장되는 공간
    • 힙 메모리 영역은 반드시 참조 변수를 통해서만 접근 할 수 있다。

기본 자료형의 메모리 크기와 저장할 수 있는 값의 범위

  • 실수는 오차가 기본적으로 있다.
  • 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는 스캐너 인스턴스)

제어문

  1. 조건문
    • if~else

오늘의 회고

JAVA를 공부하면서, 파이썬만 배웟던 나는 생각보다 JAVA가 디테일한 언어라고 생각했다. 

Python을 사용할때는 알아서 할당하는 자동이었다면, JAvA는 수동 느낌의 언어였다.

대신 수동인 만큼 더 최적화된 메모리 사용 등 다른 장점도 많은 것 같다.