[인프런] 김영한의 자바 입문 - 2

김다은·2024년 3월 8일

JAVA

목록 보기
2/14
post-thumbnail

이 게시글은 인프런 "김영한의 자바 입문" 강의를 바탕으로 작성했습니다:)

변수

변수 시작

Var1

package variable;
public class Var1 {
    public static void main(String[] args) {
        System.out.println(10);
        System.out.println(10);
        System.out.println(10);
    }
}

실행결과

10
10
10

❇️ 패키지(package)

  • 자바 파일을 구분하기 위한 폴더
  • variable라는 패키지를 만들었다면, 해당 패키지에 들어가는 자바 파일 첫줄에 package variable;와 같이 소속된 패키지를 선언해주어야 한다.
  • 자바 파일이 위치하는 패키지와 package variable 선언 위치가 같아야 한다.

Var2

package variable;
public class Var2 {
    public static void main(String[] args) {
        int a;//변수 선언 - 숫자를 담을 수 있는 그릇
        a = 10;//변수 초기화

        System.out.println(a);
        System.out.println(a);
        System.out.println(a);
    }
}

실행결과

10
10
10

코드 분석

변수 선언

int a

  • 숫자 정수(integer)를 보관할 수 있는 이름이 a라는 데이터 저장소를 만든다. 이것을 변수라 한다.
  • 이렇게 변수를 만드는 것을 변수 선언이라 한다.
  • 변수에는 숫자 정수 뿐만 아니라 문자,소수와 같이 다양한 종류 값을 저장할 수 있는 변수들이 있다. int는 숫자 정수를 보관할 수 있다.

변수에 값 대입

a=10

  • 자바에서 =은 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻이다.
  • 숫자를 보관할 수 있는 데이터 저장소인 변수 a에 값10을 저장한다.
  • 이처럼 선언한 변수에 처음으로 값을 대입해서 저장하는 것을 변수 초기화라 한다.

변수 값 읽기

System.out.println(a)

  • 변수a10이 들어가 있다면 자바는 실행 시점에 변수의 값을 읽어서 사용한다.
    - System.out.println(a) //변수 a의 값을 읽음
    - System.out.println(10) //a의 값인 10으로 변경, 숫자 10 출력

변수 값 변경

변수는 이름 그대로 변할 수 있는 수이다. 변수 a에 저장된 값을 언제든지 바꿀 수 있다.

Var3

package variable;
public class Var3 {
    public static void main(String[] args) {
        int a;//변수 선언
        a = 10;//변수 초기화 a(10)
        System.out.println(a);
        a = 50;//변수 값 변경 a(10 -> 50)
        System.out.println(a);
    }
}

실행 결과

10
50

변수 값 변경

  • 프로그램은 한 줄씩 순서대로 실행된다.
  • 변수의 값을 변경하면 변수에 들어있던 기존 값은 삭제된다.

변수 선언과 초기화

변수 선언

변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있다. 그리고 변수의 이름을 통해서 해당 메모리 공간에 접근할 수 있다. 즉, 데이터를 보관할 수 있는 공간을 만들고, 그곳에 이름을 부여한다.

Var4

package variable;
public class Var4 {
    public static void main(String[] args) {
        int a;
        int b;

        int c,d;
    }
}

변수 선언

int a;
int b;

변수는 하나씩 선언할 수도 있고

int c,d;

한 번에 여러 변수를 선언할 수도 있다.

변수 초기화

변수를 선언하고, 선언한 변수에 처음으로 값을 지정하는 것을 변수 초기화라 한다.

Var5

package variable;
public class Var5 {
    public static void main(String[] args) {
        //1. 변수 선언, 초기화 각각 따로
        int a;//변수 선언
        a = 1;//변수 초기화
        System.out.println(a);

        int b = 2; //2. 변수 선언과 초기화를 한번에
        System.out.println(b);

        int c = 3, d = 4; //3. 여러 변수 선언과 초기화를 한번에
        System.out.println(c);
        System.out.println(d);
    }
}

실행 결과

1
2
3
4
  1. 변수의 선언과 초기화를 각각 따로 할 수 있다.
  2. 변수를 선언하면서 동시에 초기화를 할 수 있다.
    int b를 사용해서 변수 b를 만들고 그 다음에 바로 b=2를 사용해서 변수 b에 값 2를 저장한다.
  3. 여러 변수를 선언하면서 초기화도 동시에 진행할 수 있다.

초기화 하지 않은 변수 읽기

변수가 초기화되지 않았다는 다음과 같은 컴파일 에러가 발생한다.
java: variable a might not have been initialized

  • 변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용한다. 따라서 초기화를 하지 않으면 이상한 값이 출력될 수 있다. 이런 문제를 예방하기 위해 자바라는 변수를 초기화 하도록 강제한다.

❇️ 참고

  • 지역 변수(Local Variable) : 개발자가 직접 초기화를 해주어야 한다. 클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화를 진행해준다.
  • 컴파일 에러 : 자바 문법에 맞지 않았을 때 발생하는 에러이다.
    - 에러를 확인하고 나면 다음과 같이 해당 라인 전체에 주석을 적용해야 다음 실행 시에 컴파일 에러 발생을 막을 수 있다.
    //System.out.println(a); //주석을 풀면 컴파일 오류 발생

변수 타입1

변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 이러한 형식을 타입(type)이라 하고, 형식또는 이라 한다.

Var7

package variable;
public class Var7 {
    public static void main(String[] args) {
        int a = 100;//정수
        double b = 10.5;//실수
        boolean c = true;//불리언(boolean) true, false 입력 가능
        char d = 'A';//문자 하나
        String e = "Hello Java";//문자열, 문자열을 다루기 위한 특별한 타입

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

실행결과

100
10.5
true
A
Hello Java
  • int : 정수를 다룬다. ex) 1,100,1000
  • double : 실수를 다룬다. ex) 0.2,1.5,100.121
  • boolead : true,false값만 사용할 수 있고, 주로 참과 거짓을 판단하는 곳에서 사용한다.
  • char : 문자 하나를 다룰 때 사용한다. 작은따옴표(')를 사용해서 감싸야한다. ex)A,
  • String : 문자열을 다룬다. 큰따옴표를 사용해야 한다. ex)"hello java"
  • 각 변수는 지정한 타입에 맞는 값을 사용해야 한다. 그렇지 않을 시, 컴파일 오류가 발생한다.

리터럴

코드에서 개발자가 직접 넣은 100,10.5,true,'A',"Hello Java"와 같은 고정된 값을 프
로그래밍 용어로 리터럴(literal)이라 한다.

int a = 100; //정수 리터럴
double b = 10.5; //실수 리터럴
boolean c = true; //불리언 리터럴
char d = 'A'; //문자 하나 리터럴
String e = "Hello Java"; //문자열 리터

변수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이라, 리터럴 자체는 변하지 않는다.

변수 타입2

숫자 타입

Var8

package variable;
public class Var8 {
    public static void main(String[] args) {
        //정수
        byte b = 127; //-128 ~ 127
        short s = 32767; //-32,768 ~ 32,767
        int i = 2147483647; //-2,147,483,648 ~ 2,147,483,647 (약 20억)

        //-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
        long l = 9223372036854775807L;

        //실수
        float f = 10.0f;
        double d = 10.0; //float보다 더 큰 범위의 숫자를 실수로 사용 가능
    }
}

메모리를 적게 사용하면 작은 숫자를 표현할 수 있고, 많이 사용하면 큰 숫자를 표현할 수 있다.
변수를 선언하면 표현 범위에 따라 메모리 공간을 차지한다.

변수와 메모리 공간 크기

  • 정수형
    • byte : -128 ~ 127 (1byte, 2⁸)
    • short : -32,768 ~ 32,767 (2byte, 2¹⁶)
    • int : -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, 2³²)
    • long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, 2⁶⁴)
  • 실수형
    • float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, 2³²)
    • double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, 2⁶⁴)
  • 기타
    • boolean : true,false (1byte)
    • char : 문자 하나(2byte)
    • String : 문자열을 표현한다. 메모리 사용량은 문자 길이에 따라 동적으로 달라진다.

리터럴 타입 지정

  • 정수 리터럴은 int를 기본으로 사용한다. 따라서 int범위까지 표현할 수 있다.
    숫자가 int 범위인 약 20억을 넘어가면 L을 붙여서 정수 리터럴을 long으로 변경해야 한다.
  • 실수 리터럴은 기본이 double형을 사용한다. float형을 사용하려면 f를 붙여서 float형으로 지정해야 한다

변수 타입 정리

다음 타입은 실무에서 거의 사용하지 않는다.

  • byte, short : 표현 길이가 너무 작다. 또 자바는 기본으로 4byte(int)를 효율적으로 계산하도록 설계되어 있다. → int 를 사용하자
    • byte 타입을 직접 선언하고 여기에 숫자 값을 대입해서 계산하는 일은 거의 없다.
      파일을 바이트 단위로 다루기 때문에 파일 전송, 파일 복사 등에 주로 사용된다.
  • float : 표현 길이와 정밀도가 낮다. 실수형은 doubl 을 사용하자
  • char : 문자 하나를 표현하는 일은 거의 없다. 문자 하나를 표현할 때도 문자열을 사용할 수 있다.
    - 예를 들어 String a = "b" 와 같이 사용하면 된다.

※ 참고: 메모리 용량은 매우 저렴하다. 따라서 메모리 용량을 약간 절약하기 보다는 개발 속도나 효율에 초첨을 맞추는 것이 더 효과적이다.

자주 사용하는 타입

  • 정수 - int, long : 자바는 정수에 기본으로 int 를 사용한다. 만약 20억이 넘을 것 같으면 long 을 쓰면 된다.
    • 파일을 다룰 때는 byte 를 사용한다.
  • 실수 - double : 실수는 고민하지 말고 double 을 쓰면 된다.
  • 불린형 - boolean : true,false 참 거짓을 표현한다. 이후 조건문에서 자주 사용된다.
  • 문자열 - String : 문자를 다룰 때는 문자 하나든 문자열이든 모두 String 을 사용하는 것이 편리하다.

변수 명명 규칙

규칙

  • 변수 이름은 숫자로 시작할 수 없다. (예: 1num , 1st)
    • 그러나 숫자를 이름에 포함하는 것은 가능하다 (예: myVar1 , num1)
  • 이름에는 공백이 들어갈 수 없다
  • 자바의 예약어를 변수 이름으로 사용할 수 없다. (예: int , class , public)
  • 변수 이름에는 영문자( a-z , A-Z ), 숫자( 0-9 ), 달러 기호($) 또는 밑줄(_)만 사용할 수 있다

관례

  • 소문자로 시작하는 낙타 표기법
    • 변수 이름은 소문자로 시작하는 것이 일반적이다. 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 소문자로 시작하고 그 이후의 각 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용한다. (예: orderDetail, myAccount)

자바 언어의 관례 한번에 정리

클래스는 대문자로 시작, 나머지는 소문자로 시작

  • 자바에서 클래스 이름의 첫 글자는 대문자로 시작한다. 그리고 나머지는 모두 첫 글자를 소문자로 시작한다.
    여기에 낙타 표기법을 적용하면 된다. 이렇게 하면 모든 자바 관례를 다 외울 수 있다.
  • 예시 : 클래스는 첫 글자 대문자, 나머지는 모두 첫 글자 소문자로 시작 + 낙타 표기법
    • 클래스 : Person , OrderDetail
    • 변수를 포함한 나머지 : firstName , userAccount
  • 여기에 예외가 딱 2개 있다.
    • 상수는 모두 대문자를 사용하고 언더바로 구분한다.
      (예. USER_LIMIT)
    • 패키지는 모두 소문자를 사용한다.
      (예. org.spring.boot)

❇️ 참고 : 변수 이름은 의미있고, 그 용도를 명확하게 설명해야 한다

  • studentCount , maxScore , userAccount , orderCount : 용도를 명확하게 설명한다.
profile
꾸준함으로 성취하는 개발자

0개의 댓글