[Java] 변수와 연산자

jojaljaejal·2024년 8월 14일

Java

목록 보기
1/3

📂변수(variable)

하나의 값을 저장할 수 있는 메모리 공간(RAM)
어렵다면 " 물건을 담을 수 있는 상자 " 라고 생각해보자.

🔎상황 1. 핸드폰을 팔기로 했다. 핸드폰을 구매자에게 배송해야하는데 배송하기 전 포장에 단계에서 어떤 상자를 고를지 골라야한다. 그렇다면 당신은 두손에 들어오는 크기의 핸드폰을 냉장고나 들어갈 법한 상자에 포장을 할 것인가?
적당한 크기의 상자에 담는 것이 정상이다.

🔎상황 2. 냉동 식품을 포장하고자한다. 장시간 이동을 해야하며 이때 선택할 수 있는 선택지 중 제일 좋은 것은 보냉이 되는 포장용기에 하는 것이 가장 좋은 선택일 것이다.


이렇게 우리는 일상생활에서도 자연스럽게 적합한 용기 및 포장 방식을 택하고 물건을 담는다.

Java에서 변수도 그렇다.

값을 저장하기 위해 저장하고자하는 값에 걸맞는 타입을 선택해야한다.

내가 숫자 중 "정수"를 저장하고자 한다면 "정수"에 맞는 변수 타입을(상자)를 선택해야하며 저장하고자 하는 정수의 크기에 따라 상자의 크기를 선택하면 된다.
"실수"를 저장하고자 한다면 "실수"에 맞는 타입, 문자라면 문자에 맞는 타입을 선택하면 된다.

int year = 2024;
System.out.println("올해:" + year);

2024 라는 숫자를 담기위해 정수형 int 타입 을 선택하고 변수명을 "year
"이라 짓고 값을 넣어줬다.
그 후 출력하는 메소드를 통해 "올해 : 2024" 라는 결과를 출력할 수 있다.
분명 나는 올해 : year 이라고 작성했지만 yearint year = 2024; 라는 초기화 과정을 통해 year 이라는 변수는 2024라는 값을 가지고있다.
그래서 컴퓨터에서는 올해 : year을 올해 : 2024로 출력하는 것이다.

쉽게 이해하자면 이런 과정이지만 더 좋은 개발자가 되기 위해선 이것보다 세부적으로 컴퓨터의 시점에서 이해를 해야한다.

심화(처음이면 건너뛰기)

  1. 자바 소스코드(.java) 를 작성한다
  2. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트코드(.class)코드로 컴파일 한다.
  3. 컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달한다.
JVM이란 자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어

[출처 : https://blog.naver.com/chlwlstjd10/222239136195 ]

클래스 로더는 .class 파일을 묶어서 JVM이 운영체제로부터 할당받은 메모리 영역인 Runtime Data Area로 적재한다.

런타임 데이터 영역 (Runtime Data Area)
런타임 데이터 영역은 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

앞서 변수에 저장한 값은 런타임 데이터 영역에 저장되어 있다가 클래스 로더가 클래스 파일을 로드하는 과정에서 저장된 변수 값을 가져오게 된다.

사용자 실행(run) -> 컴파일러가 클래스 파일로 변환 -> 클래스 로더가 클래스 파일을 메모리에 로딩하고, JVM이 이를 실행한다
JVM에서 실행되어 그 안에 있는 시스템 호출이 이루어지면서 우리에게 보여지게 되는 것이다.

시스템호출 예시) System.out.println()

자료형 사용 예시

byte age = 25;
short year = 2023;
int population = 1000000;
long universeAge = 13800000000L; // L을 붙여 long형임을 명시

float pi = 3.14f; // f를 붙여 float형임을 명시
double avogadro = 6.02214076e23;

char initial = 'A';

boolean isJavaFun = true;

  

변수사용 예시

// 변수 선언
int num; // 정수형 변수 num 선언
double price = 19.99; // 실수형 변수 price 선언과 초기화

// 변수 값 할당
num = 10;
price = 29.99;

// 변수 사용
System.out.println("숫자: " + num);
System.out.println("가격: $" + price);

// 연산
int result = num + 10;
System.out.println("결과: " + result);

컴퓨터는 왼쪽에서부터 한 줄 한 줄 읽기 때문에

  int box;
  System.out.println("변수는: " + box);
  box = 100;
  
  **Error**
 

왼쪽에서부터 읽어보자.

  1. int 타입이라고 선언 후 변수 명을 box로 지었음
  2. 컴퓨터는 int타입의 box라는 이름의 메모리를 할당 -> 공간은 만들어둿지만 아직 값은 할당받지 못했음.
  3. System.out.println 메소드를 통해 출력하고자하는데 "변수는 :" 여기까지는 문자열이니까 그냥 출력, 그 이후 box가 읽힘
  4. box를 읽은 컴퓨터는 box라는 변수가 있나 찾아봄. 그러나 box라는 공간은 찾았으나 값이 없음. 컴퓨터는 가져오지못했고 이 과정에서 에러 발생. --여기서 종료 --
  • box = 100; 이 3번 째 줄에 나왔으나 이미 2번째 줄에서 오류로 인해 진행하지 못했음.

🖥연산자(Operator)

연산자 사용예시

  import java.util.Scanner;

  Scanner input = new Scanner(System.in);

  System.out.println("비교할 첫 번째 숫자를 입력하시오");
  int num1 = input.nextInt();

  System.out.println("비교할 첫 번째 숫자를 입력하시오");
  int num2 = input.nextInt();

  System.out.println("** 두 숫자를 비교하겠습니다 **");

  boolean result1 = num1 == num2;
  boolean result2 = num1 > num2;
  boolean result3 = num1 < num2;
  boolean result4 = num1 >= num2;
  boolean result5 = num1 <= num2;
  boolean result6 = num1 != num2;

  System.out.println("입력한 숫자가 같은지 확인하겠습니다. : " + result1);
  System.out.println("첫 번째 입력한 숫자가 더 큰 숫자인지 확인하겠습니다.: " + result2);
  System.out.println("첫 번째 입력한 숫자가 더 작은 숫자인지 확인하겠습니다.: " + result3);
  System.out.println("첫 번째 입력한 숫자가 크거나 같은지 확인하겠습니다.: " + result4);
  System.out.println("첫 번째 입력한 숫자가 작거나 같은지 확인하겠습니다.: " + result5);
  System.out.println("입력한 두 숫자가 다른지 확인하겠습니다.: " + result6);

연산자를 이용하여 변수끼리 간단한 비교를 할 수 있으며 추후 조건문이나 반복문 등에서 굉장히 많이 사용된다.

논리연산자 사용예시

// 논리연산자
    // or 연산자, 둘 중 하나라도 true 이면 true 반환.
    boolean ggg = 1 > 2 || 2 == 2;
    System.out.println(ggg);

    // and 연산자, 둘 다 true여야 true를 반환
    boolean hhh = 1 > 2 && 2 == 2;
    System.out.println(hhh);
    
    // xor 연산자, 둘 중 하나만 true이여야 true를 반환.
    boolean iii = 1 > 2 ^ 2 == 2;
    System.out.println(iii);
     
profile
Ader_Error

0개의 댓글