1. const란
const는 **constant(상수)**의 줄임말로, 한 번 값을 정하면 변경할 수 없는 변수를 선언할 때 사용하는 키워드입니다.
언어에 따라 약간의 차이가 있지만, 공통적으로 “값이 변하지 않는다”는 의미를 가집니다.
===========================================================================================
const 정리
1. JavaScript
// const: 재할당 불가, 객체 내부는 변경 가능
const PI = 3.14159;
console.log(PI); // 3.14159
// PI = 3; // 오류
const numbers = [1, 2, 3];
numbers.push(4); // 내부 값 변경 가능
console.log(numbers); // [1, 2, 3, 4]
===========================================================================================
2. C / C++
#include <iostream>
using namespace std;
int main() {
const int MAX = 100;
cout << MAX << endl;
// MAX = 200; // 오류
const double PI = 3.14159;
cout << PI << endl;
// 포인터 사용 예시
const int *p = &MAX; // *p의 값은 변경 불가
int someVar = 10;
int *const q = &someVar; // q의 주소 변경 불가
return 0;
}
===========================================================================================
3. Java
public class Example {
public static void main(String[] args) {
final double PI = 3.14159;
System.out.println(PI);
// PI = 3; // 오류: final 변수는 변경 불가
}
}
===========================================================================================
4. Python
# Python에는 const 키워드가 없음
# 상수처럼 사용하려면 대문자 변수명을 사용
PI = 3.14159
print(PI)
===========================================================================================
#include <iostream>
class Dog {
private:
int age;
};
int main()
{
std::cout << "Hello World!\n";
}
===========================================================================================
#include <iostream>
class Dog {
private:
int age;
public:
int getAge() {
return age;
}
int setAge(int a) {
age = a;
}
};
int main()
{
std::cout << "Hello World!\n";
}
===========================================================================================
#include <iostream>
class Dog {
private:
int age;
public:
Dog() {
}
int getAge() {
return age;
}
int setAge(int a) {
age = a;
}
};
int main()
{
std::cout << "Hello World!\n";
}
===========================================================================================
#include <iostream>
using namespace std;
class Dog {
private:
int age;
public:
Dog(int age);
~Dog();
int getAge() const;
void setAge(int age);
};
Dog::Dog(int age) {
this->age = age;
}
Dog::~Dog() {
cout << "멍멍~\n";
}
int Dog::getAge() const {
return age;
}
void Dog::setAge(int age) {
this->age = age;
}
int main() {
Dog coco(1), coco1(2);
// coco.setAge(2);
return 0;
}
주요 내용
- class Dog: 강아지 클래스를 정의
- private int age: 나이를 저장하는 멤버 변수 (외부 직접 접근 불가)
- Dog(int age): 생성자, 객체 생성 시 나이를 초기화
- ~Dog(): 소멸자, 객체가 사라질 때 "멍멍~" 출력
- int getAge() const: 나이를 반환하는 함수, 멤버 변수 변경 안 함
- void setAge(int age): 나이를 변경하는 함수
- main():
- Dog coco(1), coco1(2); 객체 두 개 생성
- 종료 시 객체 소멸자 호출, "멍멍~" 두 번 출력
===========================================================================================
기말고사 마지막 문제일 확률 높음
코드 설명
구분설명
| Cat(int age, string name) |
생성자, 객체 생성 시 이름과 나이 초기화, 메시지 출력 |
| ~Cat() |
소멸자, 객체가 사라질 때 "객체 바이" 메시지 출력 |
| getAge() / getName() |
나이와 이름 반환 |
| setAge() / setName() |
나이와 이름 변경 |
| meow() |
고양이가 우는 메시지 출력 |
| 포인터 사용 |
Cat* pNabi = &nabi;로 객체 주소 접근 가능 |
| main |
객체 생성 → 정보 출력 → 포인터 접근 → 정보 변경 → 울음 호출 |
============================================================================================
const로 지정을 하면 초기값을 변경하면 안된다.
const를 사용하지 않거나 값을 바꾸지 말아야함.
x랑 c는 일반변수
px는 포인터 변수 포인터 변수는 주소만 저장한다
#include <iostream>
int main() {
int x; // 정수형 변수 x 선언
char c = 'A'; // 문자형 변수 c 선언 및 초기화
int *px = &x; // x의 주소를 저장하는 포인터 px
c = 'B'; // 문자 c를 'B'로 변경
x = 10; // x에 10 저장
std::cout << x << *px; // x 값과 px가 가리키는 값 출력
}
코드 설명
코드설명
| int x; |
정수형 변수 x 선언 (초기값 없음, 아직 쓰레기 값) |
| char c = 'A'; |
문자형 변수 c 선언, 'A'로 초기화 |
| int *px = &x; |
포인터 px를 선언하고 x의 주소 저장 |
| c = 'B'; |
변수 c 값 변경 (문자 'B') |
| x = 10; |
x 값 10으로 설정 |
| std::cout << x << *px; |
x 값과 포인터 px가 가리키는 값(x) 출력 |
- px는 항상 x를 가리키므로, *px의 값은 x와 동일합니다.
- 따라서 x = 10; 이후 x와 *px 모두 10입니다.
============================================================================================
지역변수는 스택이라는 메모리 영역에 잡힌다
============================================================================================
#include <iostream>
int main() {
int x=10;
int *px = new int;
std::cout << x;
}
코드 설명
코드설명
| int x = 10; |
정수형 변수 x 선언 및 초기화. 스택(stack)에 저장됨 |
| int *px = new int; |
힙(heap) 영역에 정수형 메모리 4바이트 할당, 포인터 px에 주소 저장 초기값은 쓰레기 값(garbage)임 |
| std::cout << x; |
x 값 출력 → 10 출력 |
============================================================================================
#include <iostream>
int main() {
int x=10;
int *px = new int;
*px = 10;
std::cout << px;
}
코드 설명
코드설명
| int x = 10; |
스택(stack)에 정수형 변수 x 선언 및 10으로 초기화 |
| int *px = new int; |
힙(heap)에 정수형 메모리 동적 할당, 주소를 포인터 px에 저장 |
| *px = 10; |
포인터 px가 가리키는 힙 메모리에 값 10 저장 |
| std::cout << px; |
포인터 px가 가리키는 주소 출력 (메모리 주소, 값 아님) |
- *px → 포인터가 가리키는 값
- px → 포인터 자체가 가진 주소
============================================================================================
new를 쓰면 반드시 delete를 해줘야함