본문 바로가기
컴퓨터공학/자바프로그래밍

3. 데이터를 담는 공간 변수와 기본 연산자

by meow0110 2024. 5. 30.

■ Firm Ware : 일부 제한된 OS(소프트웨어. 윈도우, iOS) 에 대한 중재의 역할을 한다.

■ 운영체제 : 하드웨어와 응용프로그램(App) 사이에 중재를 역할, 다수의 응용프로그램이 있을 때 충돌이 안나게하며 자원을 분배해주는 역할을 한다.

■ Java Virtual Machine :

-운영체제, Firm Ware, 하드웨어에 상관없이 응용프로그램이 돌아갈 수 있게 하기 위해 가상머신을 만들어놨다.

-일부 운영체제의 역할도 함, 하드웨어의 역할도 함(자바용 기계어인 Byte Code를 동작시킬 수 있는 역할).

 

■ 변수의 개념

-연산에 필요한 정보를 저장한 메모리 공간 (변수는 메모리와 관계가 있다)

-변수는 변경 가능하지만, 상수는 변경 불가능

 

■ 주소

-주소는 메모리의 바이트 단위의 일련 번호

-CPU가 데이터를 요청하기 위해서는 메모리 안에 주소(바이트 단위의 일련 번호를 주소로 매핑!)가 필요하다.

 

■ 변수 이름
-일련 번호에 가독성을 부여한 것이 변수 이름

-변수의 이름은 최대한 작업한 내용을 함축시키는게 좋다. 나중에 내가 짠 코드를 이해못하기 때문이다.

 

■ 하드웨어의 메모리를 매핑한 것이 변수이다.

■ CPU에 어떤 작업을 해라! 바로 연산자이다.

 

■ 변수 선언

-작명을 말한다. 이름을 붙여주는 것이다.

-2가지 특수문자를 쓸 수 있다. 언더스코어,언더바 ( _ )    달러표( $ )

-길이 제한이 없다.

-이름의 시작은 영문자, ( _ ) 로만 가능하다. 숫자는 안된다. 

-자바언어에서 사용하는 키워드가 있다.(오른쪽 표) 이 키워드들은 연산자이다. 그래서 이 이름들은 사용하면 안된다.

-이클립스를 쓰는 상태에서는 키워드를 입력하면 색이 다르다. 이걸로 키워드인지 아닌지 알 수 있다.

 

■변수 형의 개념 (아래로 내려가면서 개념설명이 됨)

-컴퓨터는 숫자만을 저장 및 처리 가능

-컴퓨터는 계산기이다.

-컴퓨터는 high(1), low(0)로만 인식한다. 이진수다. 그래서 숫자를 벗어나지 못한다.

 

-컴퓨터가 처리하는 영상,이미지 들도 모두 숫자로 이루어져있다.

-그래서 다양한 종류의 정보를 처리할 수 있도록 소프트웨어적으로 처리해야 함

 

-변수 형은 문자, 음의 정수, 실수 등을 저장 및 처리할 수 있도록 함
-각 변수 형은 필요에 맞춘 저장 공간을 확보할 수 있도록 함

 

■ 디버거를 사용한 실제 메모리 상태보기 (여기서는 C언어로 보여줌)

-위에 7,8,9 하얀 번호를 보면 C언어가 직접적으로 메모리에 어떻게 작용했는지를 보여준다.

-8번이 주소다. 즉 우리가 1번쪽에서 쓴 var 라는 변수(0x12345678)가 있는 장소이다. 메모리상의 주소!

-근데 우리가 배울 Java는 직접적으로 하드웨어에 접근하지 않는다. 

 

■ 왜 변수형을 배우는가? (사건의 발단!)

-컴퓨터는 계산기다. 그래서 모든 데이터는 숫자로 저장된다.

-문제는 우리는 문자도 처리해야하고, 그 외에 무언가도 처리해야 한다.

 

 

■ 위 두개 사진 모두 같이 보자!

■ 아스키코드 테이블

-알파벳, 특수기호 등을 표현하고 싶기에 변수를 매핑함.

-즉 문자(문자,기호)에 일련변호를 줌.

-10진수 마지막에 보면 127임. 즉 0~127개다. (0까지 포함해서 총 128개)

-128은 2의 7승이다.

 

■ 위 표의  (48~57)  (0x30~0x39까지) (숫자 0~9까지) 부분에 대해.   /   3개의 괄호 전부다 같은 부분!

-숫자도 왜 매핑함? 그냥 숫자는 바로 보여주면 안돼? 0x01이 왜 1이 아니야?

-아니다. 우리가 화면에서 보는 1(0x31)이라는 숫자가 있다면, 이는 매핑(0x31)되서 출력된 값이다. 즉 소프트웨어에서 문자로 출력되는 값으로 보기 위해서는 0x31로 매핑해주기 때문이다.

-예를 들면, 워드 프로세서에서  1이라는 숫자가 보인다? 그건 0x31이다.  우리가 1을 눌렀다고 0x01이 아니다!

 

■ A 는 0x41이다. 그래서 위에 빨간 숫자41이 보이는 거다.

 

■ 변수형(Type) 결론! 중요!

-어떻게 해석할거냐를 구분지어준다.

-숫자(int)로 해석할거냐? 문자(char)로 해석할거냐? 를 앞에 붙인다. 

-변수를 선언할 떄 이름(위에서 사용했던 var, ch)을 주면서, 앞에 붙이는 키워드(int, char)다.

-이걸 보고 하드웨어에 저장된 데이터를 소프트웨어적으로 어떻게 결정할지 본다.

-이것이 변수형 타입이다.

-한마디로 같은 '1'을 넣더라도 int, char에 따라 해석이 달라진다는 것이다. int일때는 진짜 숫자형태, char일때는 0x31이라는 문자형태로 인식해서 들어간다.

 

■ 숫자형 변수! 왜 있는가?

-byte는 2의 8승까지만 표현 가능하다. (0~255까지 = 총 256개!)

-표현할 수 있는 숫자 범위가 너무 낮은데?

-소숫점, 음수, 실수 등은 어떻게 표현할거야?

-그래서 여러가지 숫자형 변수도 제공하는 것이다.

 

 

■ 양/음의 정수 범위를 늘리고 싶어?

-바이트 수를 1,2,4,8 식으로 늘리면 범위가 커진다. 

-정수는 Type에 의해서 몇바이트를 점유할지에 따라서 얼만큼의 값의 표현범위가 결정된다.

-예를들어 자바에서 문자(Char)는 2bite이다. 근데 숫자는 바이트 수에 따라 byte, short, int, long으로 바꿀 수 있다.

-근데 거의 대부분 int를 사용한다.

-왜냐하면 JVM(자바가상머신)은 32bit 머신을 가정하고 만들어져 있기 때문이다.

-즉 int의 (붉은색 글씨 : 4바이트 x 8 = 32bit)의 의미는 JVM에서 가장 최적화된 처리 디자인이라는 뜻이다. (한마디로 JVM이 int를 좋아함!)

 

■ 음수를 어떻게 표현할까? : 음수표현하는 2가지 방법이 있다. (1의 보수와 2의 보수)

1의 보수 (안쓴다)

-개념은 0이면 1로 바꾸고,  1이면 0으로 바꾼다. 

-문제가 생긴다. 0000 0000 일 경우,  1111 1111이 된다. 

-근데 +0이나 -0이나 같다. 즉 위처럼 변하면 안된다. 그래서 2의 보수를 쓴다.

 

■ 2의 보수 (컴퓨터가 쓰는 방법)

-위에서 한 값에 +1을 하면 된다.

- 0000 0000 은 1111 1111 이다.(1의 보수에서)

-여기에 1을 더한다. (더하는 방식은 1의 보수 식으로)

-그러면  1 0000 0000 이 된다. 그리고 여기서 앞의 1은 넘친 숫자니까 버린다.

-즉, 2의 보수체계로가면  0000 0000은  0000 0000이 된다. (위에서 1의 보수에서는 1111 1111이었다!)

 

■ 결론 : 컴퓨터는 음수를 표현할 때 2의 보수체계를 쓴다. 

 

 

 

■ 실수

-float (4바이트) 과 double(8바이트)가 있다. 

-실수도 바이트에 따라 표현범위가 달라진다. (정수의 int, long 같이)

-근데 실수에서 바이트가 높다는 소리는, 숫자의 정확도를 말하기도 한다. (왜냐하면 소숫점이 늘어날수록 더 자세하니까!)

 

-컴퓨터에서 가급적이면 쓰지 않는다. 정수차우너에서 해결할려고 한다.

-왜냐하면, 컴퓨터는 실수 표현을 하는 알고리즘이 완벽하지 않다. 즉 실수 연산에 최적화되어있지 않다.

-그래서 코딩할 떄는 실수는 꼭 필요한 경우가 아니면 안쓰는게 좋다.

 

 

■ 저장 공간 확보 : 메모리에 쓸 크기

■ 이름 지정 : Var, ch등 과 같은 변수 이름

■ 형 지정 : int? char?  (참고로 char는 2byte다! 왜? 유니코드를 처리해야하니까. 한글과 한문 같은거!)

 

■ 각 변수형들이 갖는 byte수를 체크해두자!

■ 변수 선언

-내가 쓸 저장 공간을 결정하고 확보했다는 뜻. (이 만큼 메모리를 쓸거야!)

-해석 방법에 대해서도 결정한 것.(문자, 숫자)

 

■ 초기화 : 값을 넣는다는 뜻. 

 

■ 대입 연산자 ( 여기서   =  를 말함)

-값을 저장하기 위해 대입 연산자를 쓰는 것.

-즉  'A' 라는 값을 copy하여 ch라는 변수에 넣는 것이다.

-오른쪽 네모의 '하드웨어(메모리)'는 컴퓨터가 읽는 모습이다. 즉 A를 0x41이라고 인식하는 것이다.

-그래서 하드웨어가 읽은 0x41이 메모리에 저장되는 것이다.

 

변수 선언 3단계

공간확보

이름 지정

형 지정

 

변수 사용 3단

선언

초기화

사용 

 

 

■ 왼쪽 그림

-메모리에서 0x41를 ch에 대입한 것이다. (우리가 수학할 떄 대입하여 넣듯이)

 

■정리하자면 아래와 같이 된다.

■헷갈리면 저장공간(좌) = 값(우)  로 기억만 해두

 

 

 

■ 학습정리

1. 변수의 필요성

  • 정보 처리의 기본은 정보이며, 정보를 저장하고 관리하기 위해서는 변수가 필요함
  • 하드웨어에 저장된 정보를 구분하기 위해서 소프트웨어는 변수를 사용함

2. 변수 형

  • 숫자만 저장 및 연산할 수 있는 하드웨어에서 문자 등을 처리하는 방법이 필요함
  • 숫자도 양의 정수, 음의 정수, 실수 등 다양함
  • 프로그램의 설계 요구에 따라 저장 및 처리할 수 있는 숫자의 범위가 서로 다름
  • 변수마다 서로 다른 저장 공간을 사용함

 

3. 변수 선언의 3단계, 사용의 3단계에 대해 기억해두자!

■ 변수 선언 3단계

-공간확보

-이름 지정

-형 지정

 

■ 변수 사용 3단

-선언 (위의 공간확보,이름 지정, 형지정)

-초기화 (대입 연산자, ch는 A구나?)

-사용 (진짜 사용)