본문 바로가기

학위공부/독학사 요점정리

[독학사/컴공/객체지향프로그래밍]4.변수선언

반응형

2.자료형과 변수

 

2.2.변수선언

2.2.1.변수이름과 예약어

변수명이란 어떤 값이나 수식이 할당되어 있는 변수를 뜻함(lvalue).

 

ㄱ.   C++변수 이름 규칙

1.     변수 이름에는 영문자, 숫자, 밑줄(_)만을 사용 가능

2.     숫자를 변수 이름의 첫 문자로 사용 불가능

3.     변수 이름에서 대소문자는 구별됨

4.     C++의 키워드는 변수명으로 사용 불가능

5.     두 개의 밑줄 문자(__)로 시작하는 이름이나, 밑줄 문자(_)와 대문자로 시작하는 이름은, 그것을 사용하는 컴파일러와 리소스가 사용하기로 예약되어 있음. 

6.     변수 이름의 길이는 제한이 없음

 

 

 

ㄴ.   예약어

 

-C++에서는 C의 예약어도 사용이 가능하다.

-자료형관련(char,int), 기억관련(auto,static), 제어관련(if,while) 등이 존재한다.

 

 

2.2.2.변수 유효범위(scope)

변수는 선언되는 위치에 따라 사용 가능한 영역이 정해지며, 필요한 경우 사용자가 변수를 저장할 위치와 특성을 지정할 수 있도록 되어있다.ㄱ.   auto – 지역변수

 

-다른 조건이 없을 경우 암시적으로 사용되는 예약어이다.

-프로그램 최적화시에 가장 빠르게 동작할 수 있는 메모리이다.

-변수는 기본적으로 선언된 블록과 그 하위 블록에서 사용할 수 있다.

-하위 블록에 동일한 이름으로 변수가 선언되면 하위 블록 내에서는 하위 블록에서 선언된 변수가 사용된다.

-기본적으로 메모리내에 스택영역에 위치하며, 블록영역 안에 들어갈 때 생성 되었다가, 블록 영역을 빠져나가게 되면 자동적으로 제거된다.

 

 

:

int var1;

auto int var2

 

 

.register

-이 예약어를 사용해 선언된 변수는 가용 레지스터가 있는 경우 우선적으로 레지스터에 할당된다.

-가용 레지스터가 없는 경우 스택에 할당된다.

-레지스터는 메모리에 비해 액세스 속도가 월등하게 빠르기 때문에 자주 사용되는 변수가 레지스터에 할당되면 프로그램이 상대적으로 빠르게 동작한다.

 

 

.static

-static으로 선언된 변수는 '스태틱 데이터' 영역에 위치하며 블럭을 벗어나도 제거되지 않는다.

-프로그램이 실행될 때 메모리 공간이 할당되고 지정된 값으로 초기화 되며 프로그램 종료시까지 유지된다.

 

 

.global variable

-프로그램 내의 모든 영역에서 액세스가 가능한 변수이다.

-전역변수로 선언하기 위한 특별한 키워드가 있는 것은 아니고, 함수들의 외부에 변수를 선언하면 전역변수가 되어 스태틱 데이터 영역에 배치된다.

-전역변수는 auto키워드나 register키워드를 사용할 수 없다.

 

 

.extern

-다른 파일에서도 사용 가능한 전역변수이다.

-static은 외부에서 액세스 하도록 허용하지 않는 설정이다.

 

 

.volatile

-컴파일러가 컴파일시에 코드를 최적화를 하지 않도록 변경하는 예약어이다.

:

target = 10;

target = 20;

 

 

위와 같은 코드가 있을 경우, 컴파일러는 target변수에 10을 대입하였다 20을 대입하는 것이 아닌, target = 10; 코드를 생략하고 아래코드만 실행하게 된다. 이와 같은 최적화를 하지 않도록 설정하는 것이 volatile이다.

 

 

 

 

 

 

2.2.3.값을 변경할 수 없는 변수 – const, final

const: c++에서 '읽기 전용'데이터임을 명시하며 자료형에 적용됨

final: java에서 변수가 다시 할당될 수 없음을 나타냄

 

 

.const

int a = 10;

int b = 2;

라는 코드가 있을 경우,

a.자료형 앞에 붙는 경우 (const int* c = &a;)

c가 가리키는 대상은 변경이 가능하지만, 가리키는 값은 변경 불가

->c=&b;가 허용, *c=100;은 비허용

b.자료형 뒤에 붙는 경우 (int* const c = &a;)

포인터가 가리키는 대상은 변경 불가능하지만, 가리키는 값은 변경 가능

->*c=100;이 허용됨, c=&b;는 비허용

 

 

.final

a. class final

class가 상속되지 않도록 하기 위하여 선언.

 

 

b.method final

상속 관계에 있는 상위class와 하위class에서 상위 class에 있는 method overriding되지 않도록 하기 위하여 선언

 

 

c.variable(변수) final

초기 값이 변경되면 안되는 경우 사용.

 

 

2.2.4.참조변수(in JAVA)

-C++에서는 메모리를 생성하면 주소 그 자체를 직접 넘겨주지만, 자바에서는 메모리주소 대신 참조값을 할당해준다.

-참조값은 가상머신에서 자동으로 생성되며, 객체구분을 위한 유일한 Key값이 된다.

-자바에서는 참조()을 통해서만 객체를 관리할 수 있는데, 이 참조()은 변수에 저장될 수 있다.

-연산자 new는 클래스의 새로운 인스턴스에 대한 참조(reference)를 리턴한다.

-참조값은 4바이트짜리 정수값이다.

 

 

예제

Sun s1 = null; // 4바이트짜리 참조변수를 선언

s1 = new Sun(); //s1에 인스턴스의 참조값 할당

System.out.println("Sun s1:" + s1);

 

 

출력

Sun s1:Sun@378bad

->@다음에 16진수의 숫자값이 참조값이다.

반응형