[1주차] Java 기초 예습 - (1)

서연·2025년 4월 9일

Java

목록 보기
1/36

1. 변수

  • 단 하나의 값을 저장할 수 있는 메모리 공간을 의미
    • 변수 공간에 기록된 값은 고정되어 있지 않고, 다른 값이 기록되면 자동으로 덮어 씌워질 수 있음
    • 메모리 공간은 정보처리의 기초 단위인 1Byte로 구성
    • 메모리 공간은 각각이 구분될 수 있도록 '메모리 주소'를 가지고 있음

      메모리에 값을 저장하거나 읽을 때 해당 메모리 주소를 사용해야하는데 사람이 사용하기에는 불편하기 때문에 특정 메모리 영역에 이름을 붙이고 주소 대신 이름을 사용해 메모리 값을 저장하고 읽을 수 있게 한 것이 변수

1. 변수의 선언

  • 메모리에 값을 저장할 공간을 마련하기 위해 선언을 함
  • 선언 방법 : 변수타입 변수이름;
    • int age; int num; or int age, num;

2. 변수 생성 규칙

  • 대소문자가 구분되며 길이 제한 없음
  • 예약어(ex)true) 사용 불가
  • 숫자로 시작 불가
  • 특수문자 _와 &만 허용

3. 변수의 초기화

  • 초기화 : 변수에 처음으로 값을 저장하는 것
  • 변수에 값을 저장하는 방법 : 변수타입 변수이름 = 값;
    • int age; age = 23; or int age = 23; or int age = 23, num = 32768;

4. 변수의 종류

  • 클래스, 인스턴스, 지역 변수

2. 상수와 리터럴

1. 상수

  • 한 번만 값이 저장 가능한 변수
  • 선언 방법 : final 변수타입 변수이름;
    • final int finalScore = 100;

2. 리터럴

  • 그 자체로 값을 의미하는 것
  • 기존의 상수와 같은 의미

    Java에서는 상수를 '한 번만 값이 저장 가능한 변수'라는 의미로 사용하기 때문에 구별하기 위해 사용하는 용어

3. 리터럴의 접두사와 접미사

  • 정수형byte, short, int, long 타입이 있음

    • 정수형의 int, 실수형의 double은 기본형이기 때문에 접미사를 붙이지 않고 long 타입은 구분을 위해 100L처럼 리터럴 마지막에 접미사로 L을 붙임
    • byte, short 타입의 변수도 마찬가지로 리터럴 접미사가 존재하지 않고 int 타입과 똑같은 리터럴을 사용
      (byte, short 타입은 연산보다 저장 목적인 경우가 많아 Java의 내장 변환모듈이 자동으로 형 변환 시켜줌)
  • 실수형float, double 타입이 있음

    • float의 리터럴에는 f, double의 리터럴에는 d가 붙음
    • 실수형은 2개 밖에 존재하지 않기 때문에 한개에만 붙이면 구분할 수 있기 때문에 접미사 d는 생략 가능

4. 변수와 리터럴의 타입 불일치

  • 범위가 변수 > 리터럴인 경우 : 가능
    • int i = 'A'; int > char ,'A' = 65
    • long l = 123; long > int
    • double l = 3.14f; double > float
  • 범위가 변수 < 리터럴인 경우 : 불가능
    • int i = 30_0000_0000; int의 범위를 넘음
    • long l = 3.14f long < float
      • long(8byte), float(4byte)라 가능할 것 같지만
        실수형은 정수형보다 저장 범위가 훨씬 넓기 때문에 에러가 발생
    • float f = 3.14; float < double
  • byte, short 변수에 int 리터럴 저장 : 가능
    • 단, 변수의 타입이 범위 이내여야 함 범위 이내여야 함

3. 기본형과 참조형

1. 기본형

  • 기본형 변수는 실제 값을 저장
  • 기본형은 크게 논리, 문자, 정수, 실수형으로 분리됨
    • 논리형 : boolean
    • 문자형 : char
    • 정수형 : byte, short, int, long
    • 실수형 : float, double

2. 기본형의 종류와 크기

  • 논리형(true/false)
    • 조건식과 논리적 계산에 사용
  • 문자형
    • 문자를 저장하며 변수 당 하나의 문자만을 저장할 수 있음 (여러 개의 문자는 String 사용)
  • 정수형
    • 정수 값을 저장
    • 주로 int, long을 사용하며 byte는 이진 데이터를 다루는데 사용
    • default 타입은 int
  • 실수형
    • 실수 값을 저장
    • default 타입은 double

3. 기본형의 표현 범위

1. 표현 범위 이해하기

  • 1bit 에는 0과 1이 들어갈 수 있음
    • 1bit는 0, 1 -> 2개
      2bit는 00, 10, 01, 11 -> 4개를 표현할 수 있음
  • 즉, n비트로 표현할 수 있는 값의 개수는 : 2^n개
    • 8bit = 2^8 : 256개
  • n비트로 표현할 수 있는 부호없는 정수의 범위 : 0 ~ 2^n - 1
    • 8bit : 0 ~ 255
  • n비트로 표현할 수 있는 부호있는 정수의 범위 : -2^(n-1) ~ 2^(n-1) - 1
    • 8bit : -128 ~ 127

2. 실수형 표현 범위

  • 실수형을 처리할 때 정밀도 라는 개념이 등장
  • 정밀도는 소수점 몇자리까지 오차없이 표현할 수 있는가를 뜻함

  • S는 부호, E는 지수, M은 가수를 표현함
  • float의 가수는 23자리이지만 정규화를 통해 24자리까지 표현 가능
  • 따라서 2^24까지 표현이 가능한데 10^7 < 2^24 < 10^8 임으로 정밀도는 7자리이고
    마찬가지의 이유로 double은 15자리임
  • 실수형은 +-M x 2^E 형태로 저장하기 때문에 int와 같은 4byte 크기의 float이 int 보다 더 큰 범위의 값을 저장 가능한 것

4. 정수형 오버플로우

  • 오버플로우 : 표현가능한 범위를 넘는 것
  • 정수형은 해당 변수타입의 최솟값, 최댓값 범위를 넘어가면 값을 순환
    최댓값 + 1 -> 최솟값 / 최솟값 + 1 -> 최댓값

5. 타입간의 변환방법

  • 문자와 숫자간의 변환
    1. 숫자를 문자로
      • 숫자 + '0' -> 문자

    2. 문자를 숫자로
      • 문자 - '0' -> 숫자

  • 문자열로의 변환
    1. 숫자를 문자열로
      • 숫자 + "" -> 문자열

    2. 문자를 문자열로
      • 문자 + "" -> 문자열

  • 문자열을 숫자, 문자로 변환
    1. 문자열을 숫자로
      • Integer.parseInt("문자열")
      • Double.parseDouble("문자열")

    2. 문자열을 문자로
      • "문자열".charAt(0)

6. 참조형

  • 기본형을 제외한 나머지 타입
    • ex) String, System
  • 참조형 변수는 null 또는 메모리 주소를 저장
    • null은 '어떤 객체의 주소도 저장되지 않음'을 뜻함
    • 타입에 관계없이 변수의 크기는 항상 4byte(64bit일 경우 8byte)
    • 4byte는 2진수로 대략 40억개, 40억byte의 메모미를 다룰 수 있음

4. 문자와 문자열

1. 문자와 문자열의 차이 확인하기

char ch = 'A';
char ch = 'AB'; -> 문자열이 들어갔으므로 에러 발생
String s = "ABC"

String s = "A";
String s = ""; -> 빈 문자열 가능
char ch = ''; -> char에는 빈 문자가 들어갈 수 없으므로 에러 발생

  • String s2 = new String("AB");, String s1 = "AB"; 두 표현식 모두 사용 가능하지만 s2 방식은 거의 사용하지 않음

2. 문자열 결합

  • String s1 = "A" + "B"; -> "AB"

    ""+7 -> "" + "7" -> "7"
    숫자와 문자열을 더해줄 경우 숫자를 문자열로 바꾸고 더해야함

    ex)
    "" + 7 + 7 -> " 7 " + 7 -> " 7 " + " 7 " => " 77 "
    7 + 7 + "" -> 14 + "" -> " 14 " + "" => " 14 "
    이와 같이 빈 문자열을 어디에 더하느냐에 따라 결과값이 바뀔 수 있음

-> 문자열과 어떤 타입을 더하면 문자열이 된다는 것을 알 수 있음

3. 두 변수의 값 교환하기

  • int x = 10, y = 20; 에서 x와 y의 값을 바꾸기 위해서는 중간다리 역할을 해줄 변수 하나를 선언해야함

    int a = 10, b = 20;
    int tmp;
    tmp = a; // a = 10, tmp = 10
    a = b; // b = 20, a = 20
    b = tmp; // tmp = 10, b = 10
    -> a에 20이 들어가고 b에 10이 들어가게 되어 x와 y의 값이 바뀌게 됨

0개의 댓글