• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [C++ 프로그래밍] 정수형 데이터
    2024년 06월 21일
    • 유니얼
    • 작성자
    • 2024.06.21.:03
    728x90

    C++ 기초 프로그래밍: 정수형 데이터 초기화 방법

    C++ 프로그래밍에서 변수의 초기화는 매우 중요한 개념입니다. 특히, 정수형 데이터를 초기화하는 방법은 다양한 방식이 존재하며 각각의 방식은 고유한 특성과 장단점을 가지고 있습니다. 이번 블로그 글에서는 C++에서 정수형 데이터를 초기화하는 방법에 대해 자세히 알아보겠습니다.

    1. 중괄호 초기화 (Braced Initializers)

    중괄호 초기화는 C++11부터 도입된 초기화 방법으로, 초기화 리스트(initializer list)라고도 불립니다. 이 방법은 변수의 초기값을 설정할 때 가장 안전한 방법 중 하나로 여겨집니다.

    int elephant_count;              // 초기화되지 않은 변수. 경고: 무작위 값 포함 가능
    int lion_count{};                // 0으로 초기화
    int dog_count{10};               // 10으로 초기화
    int cat_count{15};               // 15로 초기화
    int domesticated_animals{dog_count + cat_count};  // 표현식을 사용한 초기화
    
    // 주석 처리된 코드: 존재하지 않는 변수 사용 시 컴파일 에러 발생
    // int new_number{doesnt_exist};  
    
    // 컴파일 에러: 소수점을 포함한 값을 정수로 변환 불가
    // int narrowing_conversion{2.9}; 
    
    std::cout << "Elephant count : " << elephant_count << std::endl;
    std::cout << "Lion count : " << lion_count << std::endl;
    std::cout << "Dog count : " << dog_count << std::endl;
    std::cout << "Cat count : " << cat_count << std::endl;
    std::cout << "Domesticated animal count : " << domesticated_animals << std::endl;
    

     

    중괄호 초기화의 주요 장점은 초기화되지 않은 변수의 사용을 방지하고, 잘못된 형 변환(narrowing conversion)을 방지할 수 있다는 점입니다.

    2. 함수 스타일 초기화 (Functional Initialization)

    함수 스타일 초기화는 변수를 초기화할 때 마치 함수를 호출하는 것처럼 보이는 초기화 방법입니다. 중괄호 초기화에 비해 덜 엄격하며, 때로는 정보 손실이 발생할 수 있습니다.

    int apple_count(5);
    int orange_count(10);
    int fruit_count(apple_count + orange_count);
    
    // 주석 처리된 코드: 존재하지 않는 변수 사용 시 컴파일 에러 발생
    // int bad_initialization(doesnt_exist3 + doesnt_exist4);  
    
    int narrowing_conversion_functional(2.9);  // 정보 손실 발생: 2로 초기화
    
    std::cout << "Apple count : " << apple_count << std::endl;
    std::cout << "Orange count : " << orange_count << std::endl;
    std::cout << "Fruit count : " << fruit_count << std::endl;
    std::cout << "Narrowing conversion : " << narrowing_conversion_functional << std::endl; // 정보 손실
    

    이 초기화 방법은 간결하지만, 형 변환에 대한 엄격한 검사를 수행하지 않기 때문에 정보 손실이 발생할 수 있습니다.

    3. 할당 스타일 초기화 (Assignment Initialization)

    할당 스타일 초기화는 가장 기본적인 초기화 방법으로, 등호(=)를 사용하여 변수를 초기화합니다. 이 방법 역시 형 변환에 덜 엄격합니다.

    int bike_count = 2;
    int truck_count = 7;
    int vehicle_count = bike_count + truck_count;
    int narrowing_conversion_assignment = 2.9;  // 정보 손실 발생: 2로 초기화
    
    std::cout << "Bike count : " << bike_count << std::endl;
    std::cout << "Truck count : " << truck_count << std::endl;
    std::cout << "Vehicle count : " << vehicle_count << std::endl;
    std::cout << "Narrowing conversion : " << narrowing_conversion_assignment << std::endl;
    

    할당 스타일 초기화는 익숙하고 사용하기 쉬운 방법이지만, 함수 스타일 초기화와 마찬가지로 정보 손실에 대해 주의해야 합니다.

    sizeof 연산자를 사용한 변수 크기 확인

    변수의 크기를 확인할 때는 sizeof 연산자를 사용할 수 있습니다. 이 연산자는 변수의 크기를 바이트 단위로 반환합니다.

    std::cout << "sizeof int : " << sizeof(int) << std::endl;
    std::cout << "sizeof truck_count : " << sizeof(truck_count) << std::endl;
    

    위 예제에서는 int 타입 변수의 크기를 확인하여 출력합니다.

     

    전체예제 코드

    #include <iostream>
    
    int main()
    {
        std::cout << std::endl;
        std::cout << "----------" << "Braced Initializers" << "----------" << std::endl;
        std::cout << std::endl;
    
        // 중괄호 초기화 (Braced Initializers)
        // 중괄호 초기화는 C++11부터 도입된 초기화 방법으로, 초기화 리스트(initializer list)라고도 불립니다.
        // 이 방법은 변수의 초기값을 설정할 때 가장 안전한 방법 중 하나로 여겨집니다.
        int elephant_count;                              // 초기화되지 않은 변수. 경고: 무작위 값 포함 가능
        int lion_count{};                                // 0으로 초기화
        int dog_count{10};                               // 10으로 초기화
        int cat_count{15};                               // 15로 초기화
        int domesticated_animals{dog_count + cat_count}; // 표현식을 사용한 초기화
    
        // 주석 처리된 코드: 존재하지 않는 변수 사용 시 컴파일 에러 발생
        // int new_number{doesnt_exist};
    
        // 컴파일 에러: 소수점을 포함한 값을 정수로 변환 불가
        // int narrowing_conversion{2.9};
    
        std::cout << "Elephant count : " << elephant_count << std::endl;
        std::cout << "Lion count : " << lion_count << std::endl;
        std::cout << "Dog count : " << dog_count << std::endl;
        std::cout << "Cat count : " << cat_count << std::endl;
        std::cout << "Domesticated animal count : " << domesticated_animals << std::endl;
    
        // 함수 스타일 초기화 (Functional Initialization)
        // 함수 스타일 초기화는 변수를 초기화할 때 마치 함수를 호출하는 것처럼 보이는 초기화 방법입니다.
        // 중괄호 초기화에 비해 덜 엄격하며, 때로는 정보 손실이 발생할 수 있습니다.
    
        std::cout << std::endl;
        std::cout << "----------" << "Functional Initialization" << "----------" << std::endl;
        std::cout << std::endl;
    
        int apple_count(5);
        int orange_count(10);
        int fruit_count(apple_count + orange_count);
    
        // Information lost. less safe than braced initializers
        int narrowing_conversion_functional(2.9);
    
        std::cout << "Apple count : " << apple_count << std::endl;
        std::cout << "Orange count : " << orange_count << std::endl;
        std::cout << "Fruit count : " << fruit_count << std::endl;
        std::cout << "Narrowing conversion : " << narrowing_conversion_functional << std::endl; // Will loose info
    
        // 할당 스타일 초기화 (Assignment Initialization)
        // 할당 스타일 초기화는 가장 기본적인 초기화 방법으로, 등호(=)를 사용하여 변수를 초기화합니다.
        // 이 방법 역시 형 변환에 덜 엄격합니다.
    
        std::cout << std::endl;
        std::cout << "----------" << "Assignment Initialization" << "----------" << std::endl;
        std::cout << std::endl;
        int bike_count = 2;
        int truck_count = 7;
        int vehicle_count = bike_count + truck_count;
        int narrowing_conversion_assignment = 2.9;
    
        std::cout << "Bike count : " << bike_count << std::endl;
        std::cout << "Truck count : " << truck_count << std::endl;
        std::cout << "Vehicle count : " << vehicle_count << std::endl;
        std::cout << "Narrowing conversion : " << narrowing_conversion_assignment << std::endl;
    
        // Check the size with sizeof
        std::cout << "sizeof int : " << sizeof(int) << std::endl;
        std::cout << "sizeof truck_count : " << sizeof(truck_count) << std::endl;
    
        // ----------Braced Initializers----------
    
        // Elephant count : 32760
        // Lion count : 0
        // Dog count : 10
        // Cat count : 15
        // Domesticated animal count : 25
    
        // ----------Functional Initialization----------
    
        // Apple count : 5
        // Orange count : 10
        // Fruit count : 15
        // Narrowing conversion : 2
    
        // ----------Assignment Initialization----------
    
        // Bike count : 2
        // Truck count : 7
        // Vehicle count : 9
        // Narrowing conversion : 2
        // sizeof int : 4
        // sizeof truck_count : 4
        return 0;
    }

    결론

    C++에서 정수형 데이터를 초기화하는 방법에는 중괄호 초기화, 함수 스타일 초기화, 할당 스타일 초기화가 있으며, 각각의 초기화 방법은 고유한 특성과 장단점을 가지고 있습니다. 중괄호 초기화는 가장 안전한 방법으로 추천되며, 함수 스타일 초기화와 할당 스타일 초기화는 정보 손실에 대해 주의가 필요합니다. 프로그램 작성 시 적절한 초기화 방법을 선택하여 변수 초기화를 관리하는 것이 중요합니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바