내일배움캠프 3일차 TIL : Java 기본문법 - 변수와 연산자

김원기·2024년 4월 23일

TIL

목록 보기
6/42
post-thumbnail

시작하기 전에...

대학시절 배웠던 자바는... python과 Swift에 의해 잊혀져따....

오늘은 클래스와 객체 전까지의, 자바의 기본 문법을 다뤄볼 예정이다.

물론 자바도 다른 언어처럼 기본적인 문법은 비슷하다고 기억하기 때문에 깊게 파고들지는 않을 예정이지만 그래도 기억이 안나니까...

물론 내 생각에 보충이 필요하다 싶다면 따로 찾아서 공부할 생각이다.

그리고 적당히 기본문법을 다시 상기하며 체득하면 앞으로의 코딩 테스트 연습도 자바로 해결할 예정이다. (파이썬도 안까먹게 가끔씩 쓰면서)

변수

변수는 기본형 변수, 참조형 변수, 래퍼 클래스 변수가 존재한다.

기본형 변수

  • 논리형 변수
  • 문자형 변수
  • 정수형 변수
  • 실수형 변수
  • 참조형 변수

논리형 변수

논리형 변수 : boolean 으로 값은 true / false 값을 저장한다.

boolean flag = true 
boolean flag = false

문자형 변수

문자형 변수 : char 로 'a', '1' 처럼 하나의 문자만 저장한다.

char alpha = 'A'
char alpha2 = '1'

정수형 변수

정수형 변수 : byte, short, int, long으로 0, 1, 10, 100 과 같은 정수형 숫자 값을 저장한다.

정수형 변수는 각 변수의 범위를 넘게 되면 오버플로우가 발생하게 된다.

byte byteNum = 127; // byte는 -128~127까지의 범위만 저장한다.
short shortNum = 32767; // short 의 범위는 -32768~32767
int intNum = 2147483647; // int 의 범위는 -2147483648 ~ 2147483647
long longNum = 2147483647L; // long은 L을 붙여 사용한다.

실수형 변수

실수형 변수 : float, double로 0.x, 0.nnnnn과 같은 값을 저장한다.

실수형 변수 역시 범위에 맞지 않는 값을 저장하면 오버플로우가 발생한다.

float floatNum = 0.123f; // float는 4byte로 .4 * 10^38 범위를 표현하는 실수값
double doubleNum = 0.123123; // double은 8byte 로 1.7 * 10^308 범위를 표현하는 실수값

실수형에서 float와 double을 구분하기 위해 값 뒤에 f가 붙는다.

오버플로우

정수형과 실수형에서 보면 범위에 맞지 않는 값을 저장하면 해당 변수에 맞는, 즉 산출 타입으로 표현할 수 없는 값이 저장될 경우 오버플로우가 발생한다.

오버플로우는 값이 증가하면서 허용되는 가장 큰 값보다 커지고, 이로 인해 실제 저장되는 값이 아주 적은 값이나 음수로 변하는 상태를 의미한다.

오버플로우 방지

찾아 보면서 해결법이 아닐 수 있지만 방지할 수 있는 수단이 여러개가 존재하는걸 찾게되었다.

https://velog.io/@m1naworld/Java-정수-오버플로우Integer-overflow

  1. 허용범위 확인 : 각 코드를 적으며 범위를 주석으로 달았는데 해당 범위를 인지하고 변수 선언시 확인하는 것이다.
  1. BigInteger : Java에서 제공하는 클래스로 정수 타입의 저장 한계를 극복하기 위해 BigInteger 클래스를 사용한다.
    BigInteger는 정수를 문자열 형태로 저장하기 때문에 메모리 부족의 경우가 아닌 이상 무한하게 숫자를 저장할 수 있다.
  1. 예외 처리 Math 클래스의 정적 메서드 활용 :
    더 큰 값을 허용하지 않거나 오버플로우가 발생하는 것을 원하지 않는 경우 예외를 발생시켜 처리한다.

참조형 변수

문자열 변수 : String으로 "Hello, World!!", "스파르타내일배움캠프" 처럼 문장을 저장한다.

그 외 : Object, Array, List 처럼 객체, 배열, 리스트와 같이 단일 저장공간에 담을 수 없는 값을 저장한다.

String stringAlpha = "QWERTY"; // 문자열을 저장
List<int> numbers = [0, 1, 2, 3,..., 99]; // 기본형 변수를 여러개 저장한다. 

문자와 문자열

기본형 변수 중 문자와 문자열의 자세한 차이

  1. 선언의 차이
  2. 저장의 차이

두 타입의 차이

  • 문자 하나를 저장할 때 char을 사용하여 저장하는
  • 문자열을 저장하는 경우 String을 사용하여 저장한다.
  • char형은 뒤에 공백문자가 존재하지 않으며 String은 문자열 끝에 공백문자가 존재한다.
char character = 'A';
String stringAlpha = "ABCDE";

자세한 참조형

다른 기본형 변수는 변수에 실제 값을 저장한다.
참조형 변수는 기본형 변수를 참조하기 때문에 기본형 변수 즉, 참조한 원본 변수의 주소를 받아온다.

저장의 차이

  • 기본형 변수의 원본 값은 Stack영역 안에 존재한다.
  • 참조형 변수의 원본 값은 Heap영역 안에 존재한다.

Stack, Heap 영역

Stack 은 정적 저장공간, Heap은 동적 저장공간이라고 한다.

타입 변경 ( 형변환 )

  • 형변환은 기본 변수인 정수, 실수, 문자 사이에서 일어난다.
  • 문자로 입력받았지만 정수와 연산이 필요한 경우 형변환을 통해 연산이 가능하도록 할 수 있다.
 double doubleNum = 3.141592;
 int intNum=1;
 double doubleResult1, doubleResult2;
 int result1;

 doubleResult1 = doubleNum + intNum;
 doubleResult2 = doubleNum + (double)intNum;
 result1 = (int)doubleNum + intNum;

자바는 자동으로 형변환 되는 케이스도 존재하는데 저장이나 연산하는 과정에서 변수 타입의 크기 순서에 따라 작은 타입에서 큰 타입으로 자동으로 변경된다.

또한 크기가 큰 타입에서 작은 타입으로 형변환을 하게 될 경우 캐스팅이라는 강제 형변환이 이루어지는데 이 경우 큰 타입의 값이 소실된다.

연산자

변수, 상수들을 계산하기 위한 연산자

연산자의 종류

  • 산술 연산자 : +, -, *, %, << , >>
  • 비교 연산자 : >, <, >=, <=, ==, !=
  • 논리 연선자 : &&, ||, !
  • 대입 연산자 : =, ++, --
  • 기타 연산자 : (type), ? :, instance of

산술 연산자 - 비트 연산

비트 연산은 숫자의 비트 표현식을 옮기는 연산이다.
예를 들어 2라는 숫자는 10(2)의 이진수로 표현 되는데 이 비트를 옮긴다는 뜻이다.

2 << 2 의 형태로 사용되며 10 을 왼쪽으로 2만큼 옮기며 빈 자리는 0으로 채운다.

10(2)를 2만큼 왼쪽으로 옮기게 되면 1000(2)로 표현된다.

논리 연산자

  1. && : A && B 의 형태로 쓰이며 A, B 둘 다 조건이다.
    해당 A와 B의 조건이 둘 다 참이어야 True를 반환하며 하나라도 False일 경우 False를 반환한다.

  2. || : A || B 의 형태로 or 조건이다.
    A, B둘 중 하나만 참이라면 True를 반환하며 둘 다 거짓일 경우에만 False를 반환한다.

  3. ! : NOT조건 A ! B 형태의 조건
    A, B 조건 모두 false 조건일 때 true를 반환한다.

끝!

후기1. 사실 뭐 연산자를 포함해 다음에 공부할 조건문이나 반복문은 어느 언어나 비슷하니까... 다시 공부하는 마인드로...

후기2. 오버플로우나 Heap, Stack같은건 기억 안나.. 아마 클래스 다룰 때 쯤 다시..?

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글