2_java - 변수와 연산자

jin·2022년 4월 19일
0

변수(variable)

  • 임의의 값을 저장하기 위한 메모리상의 임시 저장 장소
  • 변수명 만드는 규칙
    1) 일반적으로 소문자로 작성한다.(두 개 이상의 단어가 있다면 _(언더바)또는 대문자 사용)
    ex) 반 학생 수에 대한 변수 지정 - int classStudent;
    2) 영문자,숫자,_를 사용할 수 있다.
    3) 예약어를 사용할 수 없다(int나 String같은 기능이 있는 단어는 안됨)
    4)특수문자, 공백을 사용할 수 없고, 숫자로 변수명이 시작되면 안된다.

5/2 추가분
변수란?
프로그램은 메모리 공간에 데이터를 보관하고, 여러 메모리 공간을 변수variable로 구분한다. 변수는 데이터를 담는 상자 역할을 하며 종류가 다양한데, 이를 구분하려고 데이터 타입data type을 사용한다.
데이터 타입에 따라 가능한 값, 수행할 수 있는 명령, 데이터 의미, 저장하는 방식이 달라진다. 따라서 특정 타입의 변수 상자에는 해당 타입의 데이터만 저장할 수 있다.
예를 들어 정수 변수는 정숫값만 저장할 수 있고, 실수 변수는 실숫값만 저장할 수 있다.
변수를 사용하려면?
변수를 사용하려면 컴파일러에 어떤 데이터 타입을 쓸지 미리 알려야하는데, 변수에 저장할 데이터 타입을 지정하고 이름을 붙이는 것을 변수 선언이라고 한다. 변수 선언도 실행문이므로 ;을 붙여야 하고, 데이터 타입이 같은 변수는 ,로 연결해 선언 할 수 있다.

int i; // 변수를 선언만 함
i = 40; // 변수 i를 별도로 초기화함
int j = 40; // 변수를 동시에 선언과 초기화를 함

덤.예약어 var
자바 10부터는 초깃값을 통하여 데이터 타입을 추론할 수 있는 var이라는 예약어를 지원한다. var은 키워드가 아니기 때문에 식벽자로 사용할 수 있다. var은 반드시 초깃값을 통하여 데이터 타입을 추론할 수 있고 메서드 내부에 있는 변수에 대해서만 사용한다.

var number = 100; 	// var은 정수를 나타낼 수 있는 int 타입으로 추론
var korean = "한국"; // var은 문자열을 나타낼 수 있는 String 타입으로 추론
var oops;			// 오류 -> 초깃값이 없으므로 var이 타입을 추론할 수 없다. 컴파일 오류 

참조 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

자료형(Data Type)

5/2 추가분 - 자료형
데이터 타입data type은 값values과 값을 다룰 수 있는 연산operations의 집합을 의미한다. 자바는 기본 자료형 외에도 참조 자료형을 제공한다.
프로그램 내부에서 값을 정의해 변수를 초기화할 수 있는데, 그 값을 리터럴literal이라고 한다.
기본 자료형은 정수 리터럴, 실수 리터럴, 문자 리터럴, 논리 리터럴이 있으며, 참조 타입으로 문자열 리터럴과 null이라는 특수한 리터럴이 있다.
참조 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

1. 기본 자료형(primitive Type)

  • 정수형
    byte - 1byte
    short - 2byte
    int - 4byte
    long - byte

    5/02 추가
    정수는 기본적으로 int 타입이고 값의 범위에 따라 byte, short, long을 사용한다.
    참조 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

  • 실수형
    flaot - 4byte
    double - 8byte

    5/02 추가
    실수는 기본적으로 double 타입이고 값의 범위에 따라 flaot를 사용한다.
    flaot 타입의 실수 리터럴은 F나 f 접미사를 붙여 표현한다.
    참조 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

  • 논리형
    boolean - 1byte(true, false)

    5/02 추가
    논릿값은 boolean 타입을 사용한다.
    논리 리터럴은 두 가지 상태인 true와 false로 표현한다.
    참조 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

  • 단일 문자형
    char - 2byte

    5/02 추가
    문자는 char 타입을 사용하고, 비영어권 언어까지 최대 6만 5,000여 개의 문자를 처리할 수 있도록 내부적으로는 2바이트 문자 처리 방식인 유니코드unicode를 사용한다.
    유니코드는 0~65,535 범위의 변수로 표현하기 때문에 char 타입은 일종의 정수타입이다.

2. 참조 타입(Reference Type)

  • 대표적으로 클래스와 배열이 해당된다.
  • java에서 최상위 java.lang.Object 클래스를 상속하는 모든 클래스들을 말하며 메모리 영역인 heap 영역에 생성하고 Garbage collector에 등록되며 버려지게 된다.

5/2 추가분 - 자료형
참조 타입은 객체가 있는 주소를 담는 그릇의 형태를 의미한다.
주소로 데이터인 객체를 참조하기 때문에 참조타입이라 한다.
참조 - 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음

3. 연산자

5/03 추가분
프로그램에서 주어진 데이터를 계산해 결과를 얻어 내는 과정을 연사operation이라고 한다. 연산에 사용하는 표시나 기호(+, *, <=)를 연산자operator라고 하며, 연산되는 데이터(x,y,z)를 피연산자operand라고 한다. 그리고 연산식expression은 변수, 상수, 메서드 등 피연산자와 연산자의 조합을 의미한다.

1. 대입 연산자

  • 변수는 오직 대입 연산자=를 통해서만 값의 변경이 가능하다

    5/03 추가
    대입 연산자란?
    오른쪽 값을 연산해 왼쪽에 대입한다.
    비트연산자도 있지만 일단 =, +=, -=, /=, %= 정도만 기억해두자

int num = 8;
		
// 문제) num 에 1을 더하기
System.out.println(num + 1); // 결과값 9

// 위 식에서 num 값이 더해진것 처럼 보이지만 실제로 변수 num의 값은 8로 변함없음
System.out.println(num); //결과값 8
System.out.println();

int temp = num;
num = (temp + 1); //대입 연산자를 통해서 값이 변경된다
System.out.println(num); // 결과값 9
System.out.println();
// 연산자 우선순위는 대입연산자보다 산술연산자가 우선 적용된다
int b = 10;
b = b + 1; // ( ) 없이도 b+1이 먼저 적용 된 후 다시 b에 적용된다
System.out.println(b);

2. 비교 연산자

5/05 추가
비교 연산자는 2개의 피연산자를 비교해 결괏값으로 논릿값인 true나 false를 되돌려 준다. ==와 != 는 모든 타입에 사용할 수 있지만, 그 외 비교 연산자는 논리 타입을 제외한 기초 타입에만 사용할 수 있다.

  • 비교 연산자의 결과는 참(true) 또는 거짓(false)이다.
    1) 크니? >
    2) 작니? <
    3) 같니? ==
    4) 다르니? !=
    5) 크거나 같니? >=
    6) 작거나 같니? <=
int a = 10;
int b = 3;

System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);

3. 논리 연산자

5/05 추가
논리 연산자는 피연산자의 조건을 결합해서 true와 false를 조사하며, 논리 타입에만 사용한다.
1) 종류

  • &&(and) - 양쪽 모두 참이어야 참
    양쪽 다 만족시켜야 참 값 반환, 한쪽이라도 아닐시 거짓값 반환
  • ||(or) - 양쪽 중 어느 한쪽이라도 참이면 참
    한쪽만 만족시켜도 참 값 반환, 양쪽 다 아닐시 거짓값 반환
  • !(not): 참이면 거짓으로 변환, 거짓이면 참으로 변환

2) 역할

  • 논리 연산자를 통해 여러개의 비교 연산자를 연결할 수 있다.
  • 논리 연산자를 통해 범위 설정이 가능하다.
System.out.println(10 == 10 && 3 == 3);
System.out.println(10 != 10 && 3 == 3);
System.out.println(10 == 10 && 3 != 3);
System.out.println(10 != 10 && 3 != 3);
	  
System.out.println("--------------------");
 
int a = 10, b =3;
// or 연산자 - 양쪽 중 한쪽만 true여도 true값 반환, 둘 다 false면 false 값 반환
System.out.println(a == a || b == b);
System.out.println(a != a || b == b);
System.out.println(a == a || b != b);
System.out.println(a != a || b != b);
	  
System.out.println("--------------------");
// not 연산자 - true값을 false로 변환 / false값을 true 값으로 변환
System.out.println(!true);
System.out.println(!false);

Scanner 클래스

5/05 추가
키보드로 데이터를 입력받을 때 Systen.in 객체를 사용해 입력 스트림을 생성할 수도 있디만, 입력된 데이터를 처리하는 과정이 번거롭다. 하지만 Scanner 클래스와 연결하면 데이터를 쉽게 입력받아 처리할 수 있다.
Scanner 클래스가 제공하는 메서드는 키보드로 입력된 값을 공백이나 탭 등 구분자(아래 쓰인 공백문자)로 구별해 데이터로 읽어들인다. 단, nextLine() 메서드는 행 바꿈 문자\n 만 구분자로 사용한다.

  • 읽은 데이터를 문자, 정수 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스
  • Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽는다
  • 공백문자 \t \f \r , \n
  • 개발자가 원하는 타입 값으로 쉽게 읽을 수 있다.
    -프로그램을 실행시키고 콘솔창에 문자열을 입력 후 Enter key 를 입력하면 된다.
import java.util.Scanner
public class Scanner_test{
  public static void main(String[] args
  Scanner scan = new Scanner(System.in);
  int num = scan.nextInt();
  System.out.printf("입력하신 숫자는 %d 입니다.\n",num);
}

System.in
키보드와 연결된 java의 표준 입력 스트림이다.
입력되는 키를 바이트로 리턴하는 저수준 스트림이다.
System.in을 Scanner 클래스 없이 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움이 있다.

덧. 수업이 많이 하드하다. 기초적인 개념은 네이버 카페에 올라와있고 강의를 보고 하거나 구글링하거나 선생님께 여쭤보는 등 자기주도적 학습으로 주구장창 문제를 풀고 또 풀고 풀고풀고 테스트다.
어려워도 자신의 페이스를 유지해서 끝까지 완주 하는 것을 목표로 삼고 있다.
덧덧. java 패키지나 변수, 클래스명에 한글을 못쓸 줄 알았는데 수업하면서 편견이 깨졌다. 그래도 실무에서는 영어겠지..?

*모든 인용글은 한빛아카데미 - 쉽게 배우는 자바 프로그래밍 / 우종정 지음에서 참조했습니다.

0개의 댓글