극동대학교\AI컴퓨터공학과\JAVA/자바 공부

변수(1장)

sundori 2024. 6. 12. 22:21

목차

변수

변수는 값을 저장하는 메모리 공간이다. 쉽게 비유하자면 음식을 담는 그릇이라고 할 수 있다.

예를 들어 100과 200이 담겨 있는 그릇은 a 그릇과 b 그릇이라고 보면 된다.

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
    }
    
}

그러면 두 그릇의 음식을 하나의 그릇에 합친다고 하자. 새로운 그릇(c)이 필요하다.

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = a + b;
    }
}

그렇게  한 번 출력해 보면 300이라는 숫자가 나오는 것을 볼 수 있다.

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = a + b;
        System.out.println(a + "+" + b + "=" + c);
    }
}
------
출력 결과
100+200=300

빼기 연산

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = a - b;
        System.out.println(a + "-" + b + "=" + c);
    }
}
------
출력 결과
100-200=-100

곱하기 연산

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = a * b;
        System.out.println(a + "*" + b + "=" + c);
    }
}
------
출력 결과
100*200=20000

나누기 연산

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = a / b;
        System.out.println(a + "/" + b + "=" + c);
    }
}
------
출력 결과
100/200=0

나머지 연산

public class Study {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = a % b;
        System.out.println(a + "%" + b + "=" + c);
    }
}
------
출력 결과
100%200=100

 

변수에 문자열 대입

문자열(String)에는 큰 따옴표("")를 사용하고, 한 글자로 이루어진 문자(char)에는 작은따옴표('')를 사용한다.

 

public class Study {
    public static void main(String[] args) {
        String a = "안녕";
        String b = "하세";
        char c = '요';
        char d = '.';
        System.out.println(a + b + c + d);
    }
}
------
출력 결과
안녕하세요.

 

문자열에서 빼기 연산은 불가능하다.

변수명 작성 방법

  • 영문과 숫자 사용가능
public class Study {
    public static void main(String[] args) {
        int a = 100;
        int abcd = 100;
        int zzz = 100;
        int a233= 100;
        int iloveyou = 100;
    }
}
  • 언더바 사용 가능
public class Study {
    public static void main(String[] args) {
        int a_a = 100;
        int _abcd = 100;
        int __zzz = 100;
        int _a233= 100;
        int _1234 = 100;
    }
}
  • 대, 소문자 구분
public class Study {
    public static void main(String[] args) {
        int a_a = 100;
        int A_A = 100;
        int A_a = 100;
        int a_A= 100;
    }
}
  • 예약어 사용 불가

예약어는 자바에서 이미 문법상 사용하고 있는 단어로 아래와 같은 종류가 있다.

boolean byte char short int long float double
private protected public class abstract interface extends implements
enum void return if else switch case default
for do while break contunue true flase try
catch finally throw throws transient volatile package import
synchronized native final static strictfp assert    
public class Study {
    public static void main(String[] args) {
        int if = 100;
        int else = 100;
        int int = 100;
    }
}
-------
에러! 사용불가!
  • 클래스명 사용 지양

클래스명을 변수로 사용하면 문법상 오류가 발생하지는 않지만 클래스 본래의 기능을 잃어버리기 때문에 정상적인 프로그램을 만들 수가 없을 수 있다. 예를 들어 출력문인 System.out.printls() 메서드에서 클래스명인 System과 문자열 클래스명인 String을 변수명으로 사용하면 당장 에러가 발생하지는 않는다.

public class Study {
    public static void main(String[] args) {
        int System = 100;
        int String = 100;
    }
}
-------
에러 발생하지 않음

하지만 출력을 해보면? 다음과 같이 에러가 발생한다. 본래의 기능을 잃어서이다.

public class Study {
    public static void main(String[] args) {
        int System = 100;
        int String = 100;
        System.out.println(System + String);
    }
}
------
출력 결과
Study.java:5: error: int cannot be dereferenced
        System.out.println(System + String);
              ^
1 error

Scanner 클래스

이번에는 직접 키보드로 입력하고 그 입력된 값으로 계산이 가능하게 하는 클래스를 본다.

변수의 값을 키보드로 직접 입력받도록 도움을  주는 Scanner 클래는 그 외에도 많지만 nextInt()와 같은 메서드를 제공한다. 

nextInt()

import java.util.Scanner;

public class Study {
    public static void main(String[] args) {
        // Scanner 클래스를 사용하기 위한 준비 작업.
        Scanner scanner = new Scanner(System.in);
        // 키보드를 통해 입력 받은 숫자를 get_number 변수에 저장.
        int get_number = scanner.nextInt();
        // 출력
        System.out.println(get_number);
        // 더 이상 키보드로의 입력이 필요 없으니 Scanner 클래스를 닫기
        scanner.close();
    }
}
------
키보드로 입력한 값 : 1
출력된 결과 : 1

nextDouble(), next()

이러한 메서드가 존재하는 이유는 각 변수에는 알맞은 형태가 있다.

예를 들어 int는 숫자(정수)를 저장할 수 있는 그릇을 만드는 예약어이고, float,double은 실수형 숫자를 저장할 수 있는 그릇을 만드는 예약어이다. 왜 이렇게 구분하는지에 대한 의문점은 아래 코드를 보자.

import java.util.Scanner;

public class Study {
    public static void main(String[] args) {
        // Scanner 클래스를 사용하기 위한 준비 작업.
        Scanner scanner = new Scanner(System.in);
        // 키보드를 통해 입력 받은 숫자를 get_number 변수에 저장.
        int get_int_number = scanner.nextInt();
        
        // 출력
        System.out.println(get_int_number);
        // 더 이상 키보드로의 입력이 필요 없으니 Scanner 클래스를 닫기
        scanner.close();
    }
}
------
입력 값 : 1.11111
출력되는 값이 없고 오류가 발생한다.
Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:864)
        at java.util.Scanner.next(Scanner.java:1485)
        at java.util.Scanner.nextInt(Scanner.java:2117)
        at java.util.Scanner.nextInt(Scanner.java:2076)
        at Study.main(Study.java:8)

int로 생성된 변수는 오로지 숫자(정수) 저장이 가능하다. 더 쉽계 이야기하자면 삼각형 모양으로 생긴 구멍에 사각형 모양의 물건을 못 집어 넣는 것 처럼말이다. 재질이 같더라도...

import java.util.Scanner;

public class Study {
    public static void main(String[] args) {
        // Scanner 클래스를 사용하기 위한 준비 작업.
        Scanner scanner = new Scanner(System.in);
        // 키보드를 통해 입력 받은 숫자(실수)를 변수에 저장.
        double get_double_number = scanner.nextDouble();
        
        // 출력
        System.out.println(get_double_number);
        // 더 이상 키보드로의 입력이 필요 없으니 Scanner 클래스를 닫기
        scanner.close();
    }
}
------
입력 값: 1
출력 결과 : 1.0

입력 값: 1.111
출력 값: 1.111
import java.util.Scanner;

public class Study {
    public static void main(String[] args) {
        // Scanner 클래스를 사용하기 위한 준비 작업.
        Scanner scanner = new Scanner(System.in);
        // 키보드를 통해 입력 받은 문자열을 get_string 변수에 저장.
        // char도 마찬가지로 사용.
        String get_string = scanner.next();
        
        // 출력
        System.out.println(get_string);
        // 더 이상 키보드로의 입력이 필요 없으니 Scanner 클래스를 닫기
        scanner.close();
    }
}
------
입력 값 : Hello!
출력 결과 : Hello!

이렇게 키보드를 통해 입력 받고자하는 것에 따라 nextInt(), nextDouble(), next()처럼 나뉘어진다.

사칙연산 계산기

import java.util.Scanner;

public class Lab02_02 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);

		int number1, number2;
		int rAdd;
		int rSub;
		int rMul;
		double rDiv;
		int resRem;

		System.out.print("정수1 =>");
		number1 = s.nextInt();
		System.out.print("정수2 =>");
		number2 = s.nextInt();

		rAdd = number1 + number2;
		rSub = number1 - number2;
		rMul = number1 * number2;
		rDiv = (double) number1 / number2;
		rRem = number1 % number2;

		System.out.println(number1 + "+" + number2 + "=" + rAdd);
		System.out.println(number1 + "-" + number2 + "=" + rSub);
		System.out.println(number1 + "x" + number2 + "=" + rMul);
		System.out.println(number1 + "/" + number2 + "=" + rDiv);
		System.out.println(number1 + "%" + number2 + "=" + rRem);

		s.close();
	}
}

'극동대학교\AI컴퓨터공학과\JAVA > 자바 공부' 카테고리의 다른 글

데이터형과 문자열(4장)  (1) 2024.06.14
연산자 (2장)  (0) 2024.06.12