본문 바로가기
학습/IT

[IT] Java기초(3) - 변수(variable), 데이터의 크기와 종류, 캐스팅

by 개성공장 2021. 11. 9.
반응형

동해바다

 

□ 변수(variable)

* 프로그래밍 언어

 - 프로그래밍이란 컴퓨터와 개발자 혹은 사용자 사이의 커뮤니케이션입니다.

 - 컴퓨터와 커뮤니케이션을 하는 언어를 프로그래밍 언어라 합니다.

 - 저급 언어 -> 고급 언어

 - 저급일수록 컴퓨터의 세밀한 처리가 가능. C언어, Java는 고급언어에 속합니다.

 

* 프로그래밍의 첫 단계

 - 프로그램으로 다루려는 정확한 데이터를 구분해주는 작업이 필요합니다.

 - 내가 인식하는 데이터를 컴퓨터는 인식하지 못합니다.

 - 그래서 변수가 필요!

 

* 컴퓨터와 데이터

 - 컴퓨터가 인간이 이해하는 데이터 자체를 이해하지 못하므로 별도의 언어를 통해 지시합니다.

 - 컴퓨터 상의 모든 데이터가 처리되기 위해서는 메모리를 사용합니다.

 - 메모리 상에 얼마의 크기에 어떤 데이터를 담는지를 표시하는 작업이 필요합니다.

 

* 변수? 상수?

 - 아직 결정되지 않거나 나중에 변경될 것 같은 데이터는 변수로 선언

 - 고정된 불변의 값은 항상 값은 값을 유지한다는 의미에서 상수라고 표현

 - 변수로 해 두면 나중에 재사용이 가능

 

* 무엇을 변수로 정하는가?

 - 동일한 데이터가 여러 번 나오면 변수나 상수로 선언

 - 프로그램이 실행되면서 결정되는 데이터는 변수로 선언

 - 외부에서 "사용자가 입력하는 데이터들"은 변수로 생각

 

* Strong Typed : 어떤 데이터를 변수로 사용할 때 엄격하게 타입을 구분해 주어야 하는 언어, C, C++, Java

* Weak Typed : 변수의 타입 선언 시에 간단하거나 아예 없는 방식의 언어, JavaScript, Python, Ruby

 

* 변수선언, 초기화...

 - 변수의 선언 : 컴퓨터 상에 공간만 만드는 것. 변수의 선언만으로는 어떤 일이 일어나지는 않습니다.

 - 변수의 선언 및 초기화(assign연산자 '=') : 공간을 만들고 데이터도 채우는 것

 - 변수의 타입 + 변수의 이름(변수명) => 변수선언!, 변수선언은 최초에만 1번 하면 됩니다.

 - 변수타입 : 메모리 공간의 크기, 어떤 종류의 데이터를 다룰지 결정

 - 변수이름 : 호출을 위한 이름

 

* 컴퓨터에 변수를 선언한다는 것

 - 컴퓨터 상에 보관해줄 데이터를 태그와 함께 표시

 - "int v1 = 100;"

 - 필요한것 : 선언할 데이터의 종류, 데이터 값, 태그와의 연결 =

 

* 변수의 assign

 - "int v1 = 100;", "int v2=v1;"

 - 100 데이터 생성 -> v1 변수 생성 -> v1에 assign    /    v1 변수 loading -> v2 변수 생성 -> v2에 assign

 

※ 상자 개념으로 꺼내고 담는다로 이해해봅시다.

 

* 만약 데이터가 매우매우 크다면? -> 포인터 개념

 - 메모리 공간을 아끼고 좀 더 빠르게 변수 개념을 사용할 수 있습니다.

 

* 데이터의 크기와 종류

 - 숫자(정수)를 나타낼 때에는 int (4byte)

 - 문자를 나타낼 때에는 String (대문자 유의)

 - 숫자(소수)를 나타낼 때에는 double

 - 참, 거짓을 나타낼 때에는 boolean

 

※ C언어의 포인터는 java에선 레퍼런스(참조)

 

장어초밥

 

□ 변수 문제 실습

* 예제

 - 키보드에서 사용자가 입력하는 두 값을 더하는 프로그램을 만들어봅니다.

 - 태어난 년도를 입력하면 자동으로 나이가 계산되는 프로그램을 만들어봅니다.

 

* 변수 선언 가이드

 - 로직을 짜기 전에 변수를 검토합니다.

 - 변수명은 심각하게 고민해서 선언합니다.

 

* 입력 받는 변수는 일단 처리

 - 프로그램에서 입력 받아서 실행되어야 할 때 일단 입력을 받지 말고, 변수를 선언해 두고 처리합시다.

 

* 더하기 프로그램 작성 요령

 - 입력 받을 숫자를 미리 변수로 선언

 - 결과가 나온 후에 모르는 것을 찾습니다.

 - 사용자가 입력하는 부분은 무조건 변수로!

 

=== 코드 ===

import java.util.Scanner;

public class AddTest {

	public static void main(String[] args) {
		//키보드에서 입력 받는 방법

		Scanner keyboard = new Scanner(System.in);
		System.out.println("enter an integer");

		//숫자 두개
		int input_1=keyboard.nextInt();
		int input_2=keyboard.nextInt();
		//변수와 변수의 계산
		int result=input_1+input_2;

		System.out.println("결과는 "+result);
	}
}

==========

 

 

* 간단한 연산작업

 - 몇 년 생인지 입력하면 나이를 계산해서 출력

 

* 작업 내용

 - 키보드 입력 받기

Scanner keyboard = new Scanner(System.in);

System.out.println("enter an integer");

 

=== 코드 ===

import java.util.Calendar;
import java.util.Scanner;

public class Show {

	public static void main(String[] args) {
		//키보드에서 입력받기
		Scanner keyboard = new Scanner(System.in);
		System.out.println("Your birth year?");

		//입력 : 사용자의 생년을 입력 받는다. 변수명:birthYear
		int birthYear = keyboard.nextInt();

		//현재의 년도를 알아야 한다. currentYear
		int currentYear = Calendar.getInstance().get(Calendar.YEAR);

		//나이 age = currentYear - birthYear + 1
		int age = currentYear - birthYear + 1;

		System.out.println("당신의 나이는 " + age +"살입니다.");
	}
}

==========

 

가리비초밥

 

 

□ 캐스팅

* 캐스팅(casting)

 - Down casting

 - int는 4byte 크기, byte는 1byte 크기

 - 형변환 : 큰 상자의 내용물을 작은 상자에 넣는 작업

 

int intValue = 128;

byte value = (byte) intValue;

System.out.println(value);

 

=> 결과 : "-128"

 

 

 - 반대의 경우 : 작은 상자의 내용물을 큰 상자에 넣으면?

 

byte value = 13;

int intValue = value;

System.out.println(intValue);

 

=> 결과 : 아무 문제 없이 "13" 출력

 

 

 - 형변환 : 타입 자체를 바꾸는 경우

 

byte value = 65;

char ch = (char) value;

System.out.println(ch);

 

=> 결과 : "A"

(65라는 숫자는 아스키코드 상에서 A와 매칭됨)

 

 - byte(8bit) 대신 int(32bit)를 쓰는 이유는 CPU와 관련이 있습니다.

 - CPU가 처리하는 데이터 단위는 32bit 혹은 64bit를 쓰기 때문에 int를 쓰는 것이 더 효율적입니다.

반응형

댓글