25.02.11(화) 2일차 Java

허배령·2025년 2월 10일

괴발개발 TIL

목록 보기
2/54

숫자 연산

System.out.println("1+2"); - 1+2
System.out.println(1+2);   - 3

"" 안에 작성된 코드는 단순 문자열로 인식
"" 안에 작성되지 않은 코드는 숫자, 변수로 인식

  • +, - , * , / , % 다 됨
  • %는 나누고 나머지 값
System.out.println("14 * 19 =" +266); ------------ 14 x 19 = 266 으로 뜸 (문자 그대로)
System.out.println("14 * 19 =" + 14 x 19); ------- 14 x 19 = 266 으로 뜸 (뒤가 계산)

System.out.println("90 + 70 + 65 = " + 90 + 70 + 65); ---- 907065로 이어쓰기 됨
System.out.println("90 + 70 + 65 = " + (90 + 70 + 65)); -- 뒤가 계산 됨
  • 자바는 사칙연산의 우선 순위를 그대로 따른다
    -> 우선 계산을 원하면 () 소괄호 사용

    + 기호의 역할
  • 숫자 + 숫자 = 덧셈 연산 결과

  • 문자열 + 숫자 or
    문자열 + 문자열 --> 이어쓰기
    System.out.println("A" + "B"); - AB

변수

변수라는 박스 안에 값이라는 데이터를 넣음(기록)

  • 변수에 기록된 값은 지속적으로 사용 가능
  • 메모리(RAM)에 값을 기록하고 지속적으로 사용하려면 변수부터 만들어야 함

CPU (중앙처리장치)
-> 뇌 (연산, 처리) - 출력
-> 기억 X

램 (주기억장치) - 변수
x=123524234324 기억

HDD / SSD (보조기억장치) - 램으로 올라감

1. 변수 사용 목적

        double pi = 3.141592653589793;		
		int r = 5;
		int h = 20;
  • 메모리(RAM)에 값을 기록하는 공간
    -> 공간에 기록되는 값(Data)이 변할 수 있어서 변수라고 한다.
  • 변수는 여러 종류 존재 (저장되는 값의 형태, 크기가 다름) ex) int, double 등 자료형
  • 변수 사용의 장점
    1. 가독성이 증가
    2. 재사용성 증가 (한 번 만든 변수를 계속 사용)
    3. 코드 길이 감소
    4. 유지보성 증가 (코드 수정이 간단해짐)
비트(bit)
  • 데이터의 최소 저장 단위
  • 2진수의 값
바이트(byte)
  • 데이터 처리 또는 문자의 최소 단위 (영어, 숫자)
  • 8개의 비트가 모임
  • 256가지의 값을 표현 가능
  • 2바이트로 유니코드 (숫자를 문자로)

2. 변수의 선언

메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

변수 선언 : 메모리(RAM)에 값을 저장할 공간을 할당하는 것
변수 값 대입 : 변수에 값을 집어 넣는 것.
초기화 : 처음 변수에 값을 대입
리터럴 : 변수에 대입되거나 작성되어지는 값 자체

  • int intNumber = 2147483647;
의미
int자료형
intNumber변수명
=대입연산자
2147483647리터럴
;마침

기본 자료형 ( ()안 숫자는 바이트)

  • 논리형 변수 선언 - boolean isTure; (1) (참/거짓)
  • 문자형 변수 선언 - char ch; (2) ('A', 'B', 'C')
  • 정수형 변수 선언 - byte bNum; (1) , short sNum; (2) , int iNum; (4) , long lNum; (8)
  • 실수형 변수 선언 - float fNum; (4) , double dNum; (8) (소수)

참조 자료형

  • 문자열 변수 선언 - String str; (참조형, 메모리크기가 없음)

논리형 boolean booleanData;

  • 메모리에 논리값(t/f)을 저장할 공간을 1byte 할당하고
  • 할당된 공간의 이름을 booleanData라고 정하겠다.
    booldeanData = ture; -> booleanData라는 변수에 true라는 논리값 집어넣기 (대입)

문자형 char 리터럴 표기법 : ' ' (홑따옴표) (문자 하나)

  • char ch = 'A'; => 쌍따옴표 쓰면 String으로 인식함
  • char ch2 = 66; => B가 나옴

char 자료형에 숫자가 대입될 수 있는 이유?

  • 컴퓨터에는 문자표가 존재, 숫자에따라 지정된 문자 모양이 각각 매핑되고
    'B'문자 그대로 대입되면 변수에 숫자 66으로 변환되어 저장
    반대로 생각하면 변수에 애초에 66이라는 숫자를 저장하는 것도 가능함.

정수형 byte byteNumber = 127;

  • 128을 넣는 순간 에러 (byte는 값의 범위가 -128 ~ 127)
  • 메모리에 정수값을 저장할 공간을 1byte 할당하고
  • 할당된 공간을 byteNumber라고 부르겠다.
  • 선언된 byteNumber 변수에 처음으로(초기값) 127을 넣음
초기화 : 처음 변수에 값을 대입

정수형 short shortNumber = 32767;

  • byte, short는 옛날 코드 잔재

정수형 int intNumber = 2147483647;

  • 정수 자료형의 기본형!!

정수형 long longNumber = 10000000000L;

  • 값이 범위 안에 있어도 뒤에 ;만 있는건 int형 방식이라 L or l을 붙여줘야 함
  • The literal 10000000000 of type int is out of range
    = 100억이라는 값은 int의 범위를 벗어났다
  • 리터럴값 자체를 int로 인식하고 있다
  • 뒤에 L or l을 붙여줌으로써 long 자료형인 것을 나타내 줌

실수형 float floatNumber = 1.2345f;

  • 1.2345까지만 쓰면 double 자료형으로 인식하기 때문에
    변수타입인 float와 일치하지 않아 Type mismatch라는 에러가 발생함

실수형 double doubleNumber = 3.141592;

  • double이 실수형 중에서 기본형!
  • 리터럴 표기법 없는 실수는 double로 인식
  • D or d를 쓸 수는 있음

변수 명명 규칙

  1. 대소문자 구분, 길이제한 X
    int abcdefg123456789; => G가 달라도 엄연히 다른 코드
    int abcdefG123456789;

  2. 예약어 사용 X
    double final; - XXX

  3. 숫자 시작 X
    char 1abc; X
    char a3bc; O

  4. 특수문자 $, _ 만 사용 가능, but 쓰지는 않음
    int $intNumber; - 문제는 없음
    int int_Number;
    자바는 카멜표기법 사용
    언더바 작성 표기법은 DB, 자바의 상수에서 사용
    ex) MEMBER_NAME

  5. 카멜표기법 - 맨처음 소문자 시작, 후속 단어 첫글자 대문자)
    ex) char helloWorldAppleBananaTomato

  6. 변수명은 언어를 가리지 않는다 (but 쓰지는 않음)
    int 정수1번;
    double 실수2번 = 3.14;
    하면 한글로도 출력이 됨

상수

final double PI VALUE = 3.14;
  • 항상 같은 수라는 뜻으로 변수의 한 종류
  • 한 번 값이 대입되면 다른 값을 재대입 할 수 없음
  • 자료형 앞에 final 키워드를 작성
  • 상수의 명명 규칙 : 모두 대문자, 여러단어 작성시 _ 사용
  • 상수를 사용하는 경우
    1) 변하면 안되는 고정된 값을 저장할 때
    2) 특정한 값에 의미를 부여하는 경우

형변환 (Casting)

값이 자료형을 변환하는 것 (단, boolean 제외)

형변환이 왜 필요한가?
  • 컴퓨터는 기본적으로 같은 자료형끼리만 연산이 가능함
    다른 자료형과 연산 시 오류 발생
    => 이런 상황을 해결하기 위해서 필요한 기술이 형변환.

자동 형변환

자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환
byte - short - int - long - float - double
char /

[int -> double 형변환]
int num1 = 10;
double num2 = 3.5;
=> 둘이 더하면 13.5가 됨
int형이 double형보다 값의 크기가 작음 -> 10에서 10.0으로 자동 형변환
원래 에러가 발생해야 하지만 "자동 형변환" 덕분에 발생하지 않는다.

[int -> long 형변환]
int i2 = 2_1000_000_000;
long l2 = 10_000_000_000L;
둘이 더하면 int가 long으로 자동 형변환 되고 값은 12_000_000_000;이 됨

[char -> int 형변환]
char 자료형은 문자형이지만 실제 저장하는 값은
0부터 6만5천번 사이에 있는 정수형 숫자임

강제 형변환

기존 자료형을 원하는 자료형으로 강제 변환 시키는 것
1) 값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환할 때
2) 출력되는 데이터의 표기법을 변환 시키고 싶을 때

강제 형변환 방법

자료형을 변환시키고 싶은 값 또는 변수 앞에 (자료형)을 작성

[double -> int 강제 형변환]
double temp = 3.14;
-> int num = (int)temp;
-> double > int 이기 때문에 괄호로 실수 3.14를 정수 3으로 만듦 (데이터 손실)

[int -> byte 강제 형변환]
int iNum = 290;
byte bNum = (byte)iNum;
290 -> 34
-> 같은 정수형 끼리의 변환 시에도 값의 범위 차이 때문에 데이터 손실이 발생

[char -> int 강제 형변환]
char ch = 'A';
System.out.println((int)ch); => 65

[int -> char 강제 형변환]
44085를 보려면
int i3 = 44085;
System.out.println((char)i3); => 갵 이라는 단어 나옴

데이터 오버플로우

  • 이 현상은 컴퓨터가 미리 예측할 수 없다!
    -> 개발자가 미리 예측해야 함. (int의 최대값을 알고 있어야 하고, -가 나올 것도 예상해야 함)
    int i6 = 2147483647; => int의 최대값
    int result = i6 + 1; => -2147483648 나옴
profile
인생은 변수

0개의 댓글