C++에서 static 키워드의 의미는?
A1: static 키워드는 변수나 함수의 생명주기(lifetime), 가시성(visibility), 그리고 저장 공간(storage duration)을 제어하는 데 사용됩니다. 주로 객체의 메모리 할당 시점과 유효 범위를 지정하고, 한정된 범위 내에서 공유되는 변수 또는 함수로 만듭니다.
Q2: 함수 내에서의 static 변수는 어떻게 동작하나요?
A2: 함수 내에 선언된 static 변수는 함수가 호출될 때마다 초기화되지 않고, 프로그램이 종료될 때까지 한번만 초기화되어 그 값을 유지합니다. 즉, 함수가 여러 번 호출되어도 이 변수는 이전 호출의 값을 기억합니다.
Q3: 클래스 내에서 static 멤버 변수는 어떤 역할을 하나요?
A3: static 멤버 변수는 모든 클래스 인스턴스가 공유하는 변수입니다. 객체마다 각각의 복사본이 존재하지 않고, 클래스 자체에 속한 단일 변수로 존재합니다. 객체 없이도 클래스 이름으로 접근할 수 있습니다.
Q4: 클래스 내에서 static 멤버 함수는 어떻게 사용되나요?
A4: static 멤버 함수는 객체 인스턴스 없이 클래스 이름으로 호출할 수 있는 함수입니다. 이 함수는 클래스의 static 변수만 접근할 수 있고, 일반 멤버 변수나 멤버 함수는 호출할 수 없습니다.
Q5: 전역 변수나 전역 함수에 static을 붙이면 어떻게 되나요?
A5: 전역 변수나 함수에 static을 붙이면, 해당 이름의 심벌(symbol)이 그 번역 단위(translation unit, 보통 하나의 소스 파일) 내에만 유효해져 외부(다른 소스 파일)에서는 접근할 수 없게 됩니다. 즉, 내부 연결(internal linkage)을 갖게 됩니다.
Q6: static 키워드가 변수의 저장 기간(storage duration)과 연관이 있나요?
A6: 네, static 변수는 정적 저장 기간(static storage duration)을 갖습니다. 이는 프로그램 시작 시 메모리에 할당되고 프로그램 종료 시 해제되는 것을 의미합니다. 실행 중에도 변수의 값이 계속 유지됩니다.
Q7: static과 const를 같이 쓰면 어떤 의미가 되나요?
A7: 클래스 내에서 static const 변수는 컴파일 타임 상수로 사용될 수 있습니다. 주로 정적인 상수를 정의할 때 사용되며, 클래스 외부에서 별도의 정의 없이 선언만으로 사용할 수 있는 경우도 많습니다.
Q8: static 키워드 사용 시 주의할 점은 무엇인가요?
A8: static 변수는 여러 함수 호출 간 상태를 유지하기 때문에 멀티스레드 환경에서는 동기화 문제(race condition)가 발생할 수 있습니다. 또한, 전역 변수처럼 과도한 사용은 프로그램의 가독성과 유지보수성을 저하시킬 수 있습니다.
Q9: C++17부터 도입된 static 변수와 관련된 주요 변화가 있나요?
A9: C++17부터는 함수 내에 선언된 static 변수가 스레드 안전(thread-safe)하게 초기화됩니다. 즉, 다중 스레드가 동시에 변수 초기화에 접근해도 안전하게 최초 1회만 초기화 되도록 보장합니다.
Q10: static 키워드와 extern 키워드의 차이는 무엇인가요?
A10: static은 내부 연결을 지정해 변수나 함수의 범위를 해당 소스 파일로 한정시키는 반면, extern은 다른 소스 파일에 선언된 변수나 함수를 참조할 때 사용합니다. 즉, static은 내부상수, extern은 외부변수 연결에 관련된 키워드입니다.
작성자:
이윤서 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:30
조회수: 137 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 137 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.