[Java] 1-1. Java의 기본

루키·2024년 7월 18일

Java

목록 보기
5/10
post-thumbnail

1. 변수(Variable)와 자료형(Data Type)

  • 변수란?

    • 자료를 저장하기 위한 메모리 공간입니다.
    • 자료형에 따라 크기가 달라집니다.
  • 자료형이란?

    • 데이터의 형태를 나타냅니다.
    • 크게 기본형참조형으로 분류할 수 있습니다.

1-1. 기본형(Primitive Type)

미리 정해진 크기의 데이터를 표현하며, 변수 자체에 값을 저장하는 방식입니다.
모두 소문자로 시작하며 비객체 타입으로 null값을 가질 수 없습니다.
기본형 데이터는 모두 메모리의 스택(Stack)영역에 저장됩니다.
기본형 데이터는 한 번 할당하면 필드 값을 변경할 수 없는 불변 객체입니다. (재할당은 가능)

구분Typebit수
논리형boolean8true / false
정수형byte8-128 ~ -127
short16-32768 ~ 32767
int32-2147483648 ~ 2147483647
long64-9223372036854775808L ~ 9223372036854775807L
실수형float32float f = 0.1234567890123456789f; //0.12345679
double64double d = 0.12345678901234567; //0.12345678901234568
문자형char16\u0000 ~ \uffff

정수형은 기본적으로 int형을 사용하고, 실수형은 기본적으로 double을 사용한다.
(정수형에서 long을 사용할 때는 뒤에 l을, 실수형에서 float을 사용할 때는 뒤에 f를 붙여준다.)

1-2. 참조형(Reference Type)

크기가 미리 정해질 수 없는 데이터를 표현하며, 변수에는 주소값만 저장하는 방식입니다.
기본적으로 제공하는 클래스, 직접 만든 클래스, 배열, 열거 타입 등을 모두 참조형이라고 합니다.
참조형 변수는 객체형으로 null로 초기화 시킬 수 있습니다.
메모리의 힙(Heap)에 실제 값을 저장하고, 힙의 주소값을 갖는 변수를 스택(Stack)에 저장합니다.
참조형 데이터는 기본적으로 가변 객체입니다. 예외적으로 String형만 불변 객체입니다.

참조형 데이터를 생성할 때는 new키워드를 사용해서 객체를 생성하여 변수에 해당 객체의 주소값을 할당해줍니다.

  • String 자료형 : 문자열을 관리하는 데이터 타입으로 기본적으로 참조형이지만, 기본형 데이터의 성질을 같이 가지고 있는 데이터 타입입니다.

    // 리터럴 방식과 생성자 방식 비교
    
    Stirng str1 = "Hello" // 리터럴 방식
    String str2 = "Hello" // str1 == str2 (true) , str1.equals(str2) (true)
    
    String str3 = new String("Hello"); // 생성자 방식
    String str4 = new String("Hello"); // str3 == str4 (false) , str1.equals(str2) (true)

    위와 같이 리터럴 방식으로 생성한 경우 Java String Pool이라는 공간에 문자열을 상수로 생성하고, 이미 있는 문자열이라면 해당 문자열의 주소를 변수에 할당합니다. == 비교 연산자는 변수에 담긴 값, 즉 주소값을 비교하므로, str1 == str2는 같은 주소를 담고 있기 때문에 true를 반환하게 됩니다.
    이와 반대로 생성자 방식으로 생성한 경우 new 키워드를 사용하여 Heap에 새로운 공간을 할당 받고, 해당 공간에 문자열을 저장하게 됩니다. 그렇기 때문에 str3와 str4가 가르키는 공간은 각각 생성된 다른 공간이기 때문에 주소값이 달라져 ==연산자로 비교하면 false가 나오게 됩니다.
    참조형 데이터는 값이 같은지 비교하기 위해서는 .equals 메서드를 사용해야 합니다.

1-3. 형 변환(Type Casting)

변수의 타입(형)을 다른 타입(형)으로 변환하는 것을 형 변환(Type Casting) 이라고 합니다.
기본적으로 기본형은 기본형끼리, 참조형은 참조형끼리 형 변환이 가능합니다.
(예외적으로 boolean 타입은 다른 기본형과 호환되지 않습니다.)

  • 기본형의 형 변환 (명시적 형 변환 vs 묵시적 형 변환)
    타입의 표현 범위(bit수)가 커지는 방향으로 할당할 경우에는 묵시적 형 변환이 발생합니다.
    반대로 작아지는 방향으로 할당하게 될 경우에는 값 손실이 발생할 수 있으므로 명시적 형 변환이 진행되어야 합니다.
int i = 300; //int형의 bit수는 32bits
byte b = (byte)i; // byte형의 bit수는 8bits -> 24bit의 자료 손실이 일어나므로 형 변환을 명시적으로 표현

기본형과 참조형의 형 변환을 위해서는 Wrapper Class를 활용합니다.

  • Wrapper class란? : 8개의 기본형에 대응하는 참조형 타입(Class)로 첫 글자를 대문자로 표현합니다. (byte -> Byte / int -> Integer / char -> Character ...)
    기본형과 달리 추가적인 속성과 기능을 포함합니다.
    • 기본형 <-> 참조형 사이의 형 변환
      • boxing / unboxing : 기본형을 참조형으로 변환하는 것을 boxing, 참조형을 기본형으로 변환하는 것을 unboxing이라고 합니다.
        int i = 10; Integer num = Integer.valueOf(i); // boxing
        Integer num = 10; int i = num.intValue(); // unboxing
      • autoboxing : JDK 1.5부터 지원하는 기능으로 박싱과 언박싱을 자동으로 처리해줍니다.
        int i = 10; Integer num = i; / Integer num = new Integer(10); int i = num;
    • String 타입의 형 변환
      문자열 -> 기본형 => <기본형 Wrapper>.parse<기본형 Wrapper>(str);
      EX) int i = Integer.parseInt(s1);
      기본형 -> 문자열 => String s1 = String.valueOf(i); / String s2 = "" + i;
      참조형 -> 문자열 => String s3 = num.toString(); / String s4 = "" + num;
      문자열 -> 참조형 => <기본형 Wrapper>.valueOf(str);
      EX) Integer num = Integer.valueOf(s3);

2. 조건문(Conditional Statement)

  • 조건문이란?

    • 조건에 따라 코드의 실행 흐름을 다르게 동작하도록 제어하는 것입니다.
    • 조건문의 종류는 크게 if문과 switch문으로 나눌 수 있습니다.
  • 조건으로 사용할 수 있는 범위

    • if문 : boolean / Boolean 타입
    • switch문 : byte, short, char, int / Byte, Short, Character, Integer / String 타입

2-1. if문

  • if문 : 한 가지 조건을 비교하여 참일 경우에만 실행 할 때 사용합니다.
if(조건식) { // 조건식이 true일 때, 아래 실행문이 동작
    // 실행문;
}
  • if-else문 : 한 가지 조건을 비교하여 참일 경우와 거짓일 경우를 나눠 실행 할 때 사용합니다.
if(조건식){ // 조건식이 true일 때, 실행문1만 동작
    // 실행문1;
}
else{ // 조건식이 false일 때, 실행문2만 동작
    // 실행문2;
}
  • else if문 : 두 가지 이상 조건을 비교하여 각각의 경우 참/거짓을 나눠 실행 할 때 사용합니다.
if(조건식1){ // 조건식1이 true일 때, 실행문1만 동작
    // 실행문1;
}
else if(조건식2) { // 조건식1이 false지만, 조건식2가 true일 때 실행문2만 동작
    // 실행문2;
}
else{ // 조건식1도 false이고, 조건문2도 false라면, 실행문3만 동작
    // 실행문3;
}

2-2. switch문

  • switch문 : 조건 변수에 들어갈 수 있는 변수의 case에 따라 실행 조건을 나눌 때 사용합니다. 조건 변수와 일치하는 case를 찾아 switch문의 끝까지 실행하므로, case의 끝에는 break를 꼭 붙여줘야한다.
switch(조건 변수){
    case value1: // 조건변수가 value1이랑 같다면, 실행문1, 실행문2가 순서대로 실행
         // 실행문1
    case value2: // 조건변수가 value2랑 같다면 실행문2만 실행
         // 실행문2
         break;
    case value3: // 조건변수가 value3이랑 같다면 실행문3만 실행
        // 실행문3
        break;
    case value4:
    case value5: // 조건변수가 value4 이거나 value5랑 같다면 실행문4만 실행
        // 실행문4
        break;
    default: // 그 외의 값은 모두 실행문5가 실행
        // 실행문5
}

3. 반복문(Iteration)

  • 반복문이란?

    • 코드를 반복적으로 실행하게 하는 제어문의 한 종류입니다.
    • 반복문의 종류는 크게 for문과 while문으로 나눌 수 있습니다.
  • 반복문의 4가지 요소

    • 초기식 : 반복을 위한 초기 변수 설정
    • 조건식 : 반복을 종료할 조건식
    • 실행식 : 반복적으로 실행할 실행문
    • 증감식 : 변수를 증감시켜 조건식으로 반복이 종료되도록 제어

3-1. for문

for(<초기식>; <조건식>; <증감식>) {
    <실행식>
}

// ex) 0부터 9까지 세로로 출력하는 반복문 
for(int i = 0; i < 10; i++) {
    System.out.println(i);
}

3-2. while문

<초기식>
while(<조건식>) {
    <실행식>
    <증감식>
}

// ex) 0부터 9까지 세로로 출력하는 반복문
int i = 0;
while(i < 10) {
    System.out.println(i);
    i++;
}

for문과 while문은 서로 변환하며 사용할 수 있습니다. while문에 비해서 for문이 여러가지 조건을 빠트리지 않고 반복할 수 있다는 장점이 있습니다.
무한 반복과 같은 경우에는 while문에 조건식으로 true를 넣어서 무한 반복하고, if문과 같은 조건문을 통해 반복문을 중단할 수 있습니다.

profile
주니어 FrontEnd 개발자가 되기 위한 기록

0개의 댓글