• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (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년 07월 07일
    • 유니얼
    • 작성자
    • 2024.07.07.:31
    728x90

    C++ 기초 프로그래밍: 입출력 조작자

    C++ 프로그래밍에서 입출력 조작자는 화면에 출력되는 내용을 형식화하는 데 사용됩니다. 입출력 조작자를 통해 출력 형식을 세밀하게 제어할 수 있으며, 이를 통해 더욱 깔끔하고 가독성 높은 출력을 구현할 수 있습니다. 이번 블로그 글에서는 C++에서 제공하는 다양한 입출력 조작자에 대해 알아보겠습니다.

    1. std::endl

    std::endl은 줄 바꿈을 수행하고, 출력 버퍼를 플러시합니다. 이는 줄 바꿈 문자인 '\n'을 사용하는 것과 동일하지만, 추가로 버퍼를 플러시하여 출력이 즉시 화면에 나타나도록 합니다.

    std::cout << "Hello";
    std::cout << "World";
    
    std::cout << std::endl;
    
    std::cout << "Hello" << std::endl;
    std::cout << "World" << std::endl;
    

    2. std::flush

    std::flush는 출력 버퍼를 플러시합니다. 이는 특정 시점에서 출력 버퍼의 내용을 강제로 출력하는 데 유용합니다.

    std::cout << "This is a nice message...." << std::endl << std::flush;
    

    3. std::setw

    std::setw는 출력될 항목의 필드 너비를 조정합니다. 이는 정렬된 표를 만들 때 유용합니다.

    std::cout << std::setw(10) << "Lastname" << std::setw(10) << "Firstname" << std::setw(5) << "Age" << std::endl;
    std::cout << std::setw(10) << "Daniel" << std::setw(10) << "Gray" << std::setw(5) << "25" << std::endl;
    

    4. std::setfill

    std::setfill은 std::setw로 지정한 필드의 나머지 부분을 특정 문자로 채웁니다.

    std::cout << std::setfill('*');
    std::cout << std::setw(10) << "Daniel" << std::setw(10) << "Gray" << std::setw(5) << "25" << std::endl;
    

    5. std::left, std::right, std::internal

    • std::left: 왼쪽 정렬
    • std::right: 오른쪽 정렬
    • std::internal: 부호는 왼쪽 정렬, 데이터는 오른쪽 정렬
    std::cout << std::left;
    std::cout << std::setw(10) << "Daniel" << std::setw(10) << "Gray" << std::setw(5) << "25" << std::endl;
    
    std::cout << std::right;
    std::cout << std::setw(10) << "Daniel" << std::setw(10) << "Gray" << std::setw(5) << "25" << std::endl;
    

    6. std::boolalpha, std::noboolalpha

    std::boolalpha는 불리언 값을 true와 false로 출력하며, std::noboolalpha는 1과 0으로 출력합니다.

    bool condition {true};
    std::cout << std::boolalpha << "condition : " << condition << std::endl; // true
    std::cout << std::noboolalpha << "condition : " << condition << std::endl; // 1
    

    7. std::showpos, std::noshowpos

    std::showpos는 양수에 대한 + 기호를 표시하며, std::noshowpos는 이를 숨깁니다.

    int pos_num {34};
    std::cout << std::showpos << "pos_num : " << pos_num << std::endl; // +34
    std::cout << std::noshowpos << "pos_num : " << pos_num << std::endl; // 34
    

    8. std::dec, std::hex, std::oct

    숫자를 10진수, 16진수, 8진수로 출력합니다.

    int pos_int {717171};
    std::cout << "pos_int (dec) : " << std::dec << pos_int << std::endl;
    std::cout << "pos_int (hex) : " << std::hex << pos_int << std::endl;
    std::cout << "pos_int (oct) : " << std::oct << pos_int << std::endl;
    

    9. std::uppercase, std::nouppercase

    16진수의 알파벳을 대문자로 출력할지 여부를 설정합니다.

    std::cout << std::uppercase << "pos_int (hex) : " << std::hex << pos_int << std::endl; // 0xAFAFAF
    std::cout << std::nouppercase << "pos_int (hex) : " << std::hex << pos_int << std::endl; // 0xafafaf
    

    10. std::fixed, std::scientific

    부동 소수점 숫자를 고정 소수점 표기법 또는 과학적 표기법으로 출력합니다.

    double a {3.1415926535897932384626433832795};
    std::cout << std::fixed << "a (fixed) : " << a << std::endl;
    std::cout << std::scientific << "a (scientific) : " << a << std::endl;
    

    11. std::setprecision

    부동 소수점 값을 출력할 자릿수를 지정합니다.

    double a {3.1415926535897932384626433832795};
    std::cout << std::setprecision(10) << "a (precision(10)) : " << a << std::endl;
    

    12. std::showpoint, std::noshowpoint

    소수점을 강제로 출력할지 여부를 설정합니다.

    double f {12.0};
    std::cout << std::showpoint << "f : " << f << std::endl; // 12.0
    std::cout << std::noshowpoint << "f : " << f << std::endl; // 12
    

    예제 코드

    다음 예제 코드는 논리 연산자를 사용하여 불리언 값과 정수 값을 비교하는 방법을 보여줍니다:

    #include <iostream>
    #include <iomanip>
    
    int main(){
    
        // std::endl : 스트림에 줄 바꿈 문자를 추가
        // 이것은 '\n'을 스트림에 추가하는 것과 동일함
        std::cout << "Hello";
        std::cout << "World";
        
        std::cout << std::endl;
        
        std::cout << "-------------" << std::endl;
        
        std::cout << "Hello" << std::endl;
        std::cout << "World" << std::endl;
        
        std::cout << std::endl;
        
        std::cout << "Hello\n";
        std::cout << "World\n";
        
        //===================================================================
        std::cout << std::endl;
    
        // std::flush : 출력 버퍼를 최종 목적지로 플러시
        std::cout << "This is a nice message...." << std::endl << std::flush;
        // 이 std::flush 이후에는 이 라인에서 메시지가 스트림으로 전송되었는지 확신할 수 있음
        // 이는 일부 응용 프로그램에서 중요할 수 있음
        
        //===================================================================
        std::cout << std::endl;
    
        // std::setw() : 출력될 항목의 필드 너비 조정
        // setw() 조작자는 출력될 다음 값에만 영향을 미침
        std::cout << "Unformatted table : " << std::endl;
        std::cout << "Daniel" << " " << "Gray" << " 25" << std::endl;
        std::cout << "Stanley" << " "  << "Woods" << " 33" << std::endl;
        std::cout << "Jordan" << " "  << "Parker" << " 45" << std::endl;
        std::cout << "Joe" << " " << "Ball" << " 21" << std::endl;
        std::cout << "Josh" << " " << "Carr" << " 27" << std::endl;
        std::cout << "Izaiah" << " " << "Robinson" << " 29" << std::endl;
        
        std::cout << std::endl;
        std::cout << "Formatted table : " << std::endl;
        
        std::cout << std::setw(10) <<  "Lastname"  << std::setw(10) << "Firstname" << std::setw(5) << "Age" << std::endl;
        std::cout << std::setw(10) << "Daniel"  << std::setw(10) << "Gray" << std::setw(5) << "25" << std::endl;
        std::cout << std::setw(10) << "Stanley" << std::setw(10)  << "Woods" << std::setw(5) <<  "33" << std::endl;
        std::cout << std::setw(10) <<  "Jordan" << std::setw(10)  << "Parker" << std::setw(5) << "45" << std::endl;
        std::cout << std::setw(10) <<  "Joe" << std::setw(10) << "Ball" << std::setw(5) << "21" << std::endl;
        std::cout << std::setw(10) << "Josh" << std::setw(10) << "Carr" << std::setw(5) <<"27" << std::endl;
        std::cout << std::setw(10) << "Izaiah" << std::setw(10) << "Robinson" << std::setw(5) << "29" << std::endl;
        
        std::cout << std::endl;
        std::cout << "Formatted table with variables: " << std::endl;
        
        int col_width{14};
        
        std::cout << std::setw(col_width) <<  "Lastname"  << std::setw(col_width) << "Firstname" << std::setw(col_width/2) << "Age" << std::endl;
        std::cout << std::setw(col_width) << "Daniel"  << std::setw(col_width) << "Gray" << std::setw(col_width/2) << "25" << std::endl;
        std::cout << std::setw(col_width) << "Stanley" << std::setw(col_width)  << "Woods" << std::setw(col_width/2) <<  "33" << std::endl;
        std::cout << std::setw(col_width) <<  "Jordan" << std::setw(col_width)  << "Parker" << std::setw(col_width/2) << "45" << std::endl;
        std::cout << std::setw(col_width) <<  "Joe" << std::setw(col_width) << "Ball" << std::setw(col_width/2) << "21" << std::endl;
        std::cout << std::setw(col_width) << "Josh" << std::setw(col_width) << "Carr" << std::setw(col_width/2) <<"27" << std::endl;
        std::cout << std::setw(col_width) << "Izaiah" << std::setw(col_width) << "Robinson" << std::setw(col_width/2) << "29" << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // 정렬 : 필드 내의 값의 정렬을 조정하는 세 가지 조작자: left, right, internal
        // 기본적으로는 오른쪽 정렬
        std::cout << std::endl;
        std::cout << "Right justified table(default) :  " << std::endl;
        
        col_width = 20;
        
        std::cout << std::right;
        std::cout << std::setw(col_width) <<  "Lastname"  << std::setw(col_width) << "Firstname" << std::setw(col_width/2) << "Age" << std::endl;
        std::cout << std::setw(col_width) << "Daniel"  << std::setw(col_width) << "Gray" << std::setw(col_width/2) << "25" << std::endl;
        std::cout << std::setw(col_width) << "Stanley" << std::setw(col_width)  << "Woods" << std::setw(col_width/2) <<  "33" << std::endl;
        std::cout << std::setw(col_width) <<  "Jordan" << std::setw(col_width)  << "Parker" << std::setw(col_width/2) << "45" << std::endl;
        std::cout << std::setw(col_width) <<  "Joe" << std::setw(col_width) << "Ball" << std::setw(col_width/2) << "21" << std::endl;
        std::cout << std::setw(col_width) << "Josh" << std::setw(col_width) << "Carr" << std::setw(col_width/2) <<"27" << std::endl;
        std::cout << std::setw(col_width) << "Izaiah" << std::setw(col_width) << "Robinson" << std::setw(col_width/2) << "29" << std::endl;
        
        // 왼쪽 정렬
        std::cout << std::endl;
        std::cout << "Left justified table :  " << std::endl;
        
        col_width = 20;
        
        std::cout << std::left;
        std::cout << std::setw(col_width) <<  "Lastname"  << std::setw(col_width) << "Firstname" << std::setw(col_width/2) << "Age" << std::endl;
        std::cout << std::setw(col_width) << "Daniel"  << std::setw(col_width) << "Gray" << std::setw(col_width/2) << "25" << std::endl;
        std::cout << std::setw(col_width) << "Stanley" << std::setw(col_width)  << "Woods" << std::setw(col_width/2) <<  "33" << std::endl;
        std::cout << std::setw(col_width) <<  "Jordan" << std::setw(col_width)  << "Parker" << std::setw(col_width/2) << "45" << std::endl;
        std::cout << std::setw(col_width) <<  "Joe" << std::setw(col_width) << "Ball" << std::setw(col_width/2) << "21" << std::endl;
        std::cout << std::setw(col_width) << "Josh" << std::setw(col_width) << "Carr" << std::setw(col_width/2) <<"27" << std::endl;
        std::cout << std::setw(col_width) << "Izaiah" << std::setw(col_width) << "Robinson" << std::setw(col_width/2) << "29" << std::endl;
        
        // 내부 정렬: 부호는 왼쪽 정렬, 데이터는 오른쪽 정렬
        std::cout << std::endl;
        std::cout << "Internal justified : " << std::endl;
        std::cout << std::right;
        std::cout << std::setw(10) << -123.45 << std::endl;
        std::cout << std::internal;
        std::cout << std::setw(10) << -123.45 << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // setfill
        
        std::cout << std::endl;
        std::cout << "Table with fill characters :  " << std::endl;
        
        col_width = 20;
        
        std::cout << std::left;
        std::cout << std::setfill('*'); // 채움 문자 설정
        std::cout << std::setw(col_width) <<  "Lastname"  << std::setw(col_width) << "Firstname" << std::setw(col_width/2) << "Age" << std::endl;
        std::cout << std::setw(col_width) << "Daniel"  << std::setw(col_width) << "Gray" << std::setw(col_width/2) << "25" << std::endl;
        std::cout << std::setw(col_width) << "Stanley" << std::setw(col_width)  << "Woods" << std::setw(col_width/2) <<  "33" << std::endl;
        std::cout << std::setw(col_width) <<  "Jordan" << std::setw(col_width)  << "Parker" << std::setw(col_width/2) << "45" << std::endl;
        std::cout << std::setw(col_width) <<  "Joe" << std::setw(col_width) << "Ball" << std::setw(col_width/2) << "21" << std::endl;
        std::cout << std::setw(col_width) << "Josh" << std::setw(col_width) << "Carr" << std::setw(col_width/2) <<"27" << std::endl;
        std::cout << std::setw(col_width) << "Izaiah" << std::setw(col_width) << "Robinson" << std::setw(col_width/2) << "29" << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // boolalpha 및 noboolalpha : 불 값의 출력 형식을 제어: 1/0 또는 true/false
        bool condition {true};
        bool other_condition {false};
        
        std::cout << "condition : " << condition << std::endl;
        std::cout << "other_condition : " << other_condition << std::endl;
        
        std::cout << std::endl;
        std::cout << std::boolalpha;
        std::cout << "condition : " << condition << std::endl;
        std::cout << "other_condition : " << other_condition << std::endl;
        
        std::cout << std::endl;
        std::cout << std::noboolalpha;
        std::cout << "condition : " << condition << std::endl;
        std::cout << "other_condition : " << other_condition << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // showpos 및 noshowpos : 양수에 대한 + 기호 표시 또는 숨기기
        int pos_num {34};
        int neg_num {-45};
        
        std::cout << "pos_num : " << pos_num << std::endl;
        std::cout << "neg_num : " << neg_num << std::endl;
        
        std::cout << std::endl;
        std::cout << std::showpos;
        std::cout << "pos_num : " << pos_num << std::endl;
        std::cout << "neg_num : " << neg_num << std::endl; 
    
        std::cout << std::endl;
        std::cout << std::noshowpos;
        std::cout << "pos_num : " << pos_num << std::endl;
        std::cout << "neg_num : " << neg_num << std::endl;   
    
        //===================================================================
        std::cout << std::endl;
    
        // 다양한 숫자 시스템 : std::dec, std::hex, std::oct
        int pos_int {717171};
        int neg_int {-47347};
        double double_var {498.32};
        
        std::cout << std::endl;
        std::cout << "default base format : " << std::endl;
        std::cout << "pos_int : " << pos_int << std::endl;
        std::cout << "neg_int : " << neg_int << std::endl;
        std::cout << "double_var : " << double_var << std::endl;
        
        std::cout << std::endl;
        std::cout << "pos_int in different bases : " << std::endl;
        std::cout << "pos_int (dec) : " << std::dec << pos_int << std::endl;
        std::cout << "pos_int (hex) : " << std::hex << pos_int << std::endl;
        std::cout << "pos_int (oct) : " << std::oct << pos_int << std::endl;
        
        std::cout << std::endl;
        std::cout << "neg_int in different bases : " << std::endl;
        std::cout << "neg_int (dec) : " << std::dec << neg_int << std::endl;
        std::cout << "neg_int (hex) : " << std::hex << neg_int << std::endl;
        std::cout << "neg_int (oct) : " << std::oct << neg_int << std::endl;
        
        std::cout << std::endl;
        std::cout << "double_var in different bases : " << std::endl;
        std::cout << "double_var (dec) : " << std::dec << double_var << std::endl;
        std::cout << "double_var (hex) : " << std::hex << double_var << std::endl;
        std::cout << "double_var (oct) : " << std::oct << double_var << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // uppercase 및 nouppercase
    
        pos_int = 717171;
        
        std::cout << "pos_int (nouppercase : default) : " << std::endl;
        std::cout << "pos_int (dec) : " << std::dec << pos_int << std::endl;
        std::cout << "pos_int (hex) : " << std::hex << pos_int << std::endl;
        std::cout << "pos_int (oct) : " << std::oct << pos_int << std::endl;
        
        std::cout << std::endl;
        std::cout << "pos_int (uppercase) : " << std::endl;
        std::cout << std::uppercase;
        std::cout << "pos_int (dec) : " << std::dec << pos_int << std::endl;
        std::cout << "pos_int (hex) : " << std::hex << pos_int << std::endl;
        std::cout << "pos_int (oct) : " << std::oct << pos_int << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // fixed 및 scientific : 부동 소수점 값에 대해
        double a {3.1415926535897932384626433832795};
        double b {2006.0};
        double c {1.34e-10};
        
        std::cout << std::endl;
        std::cout << "double values (default : use scientific where necessary) : " << std::endl;
        std::cout << "a : " << a << std::endl;
        std::cout << "b : " << b << std::endl;
        std::cout << "c : " << c << std::endl;
        
        std::cout << std::endl;
        std::cout << "double values (fixed) : " << std::endl;
        std::cout << std::fixed;
        std::cout << "a : " << a << std::endl;
        std::cout << "b : " << b << std::endl;
        std::cout << "c : " << c << std::endl;
        
        std::cout << std::endl;
        std::cout << "double values (scientific) : " << std::endl;
        std::cout << std::scientific;
        std::cout << "a : " << a << std::endl;
        std::cout << "b : " << b << std::endl;
        std::cout << "c : " << c << std::endl;
    
        std::cout << std::endl;
        std::cout << "double values (back to defaults) : " << std::endl;
        std::cout.unsetf(std::ios::scientific | std::ios::fixed); // 설정 해제
        std::cout << "a : " << a << std::endl;
        std::cout << "b : " << b << std::endl;
        std::cout << "c : " << c << std::endl;
        
        //===================================================================
        std::cout << std::endl;
    
        // setprecision() : 부동 소수점 값을 출력할 자릿수 지정. 기본값은 6
        a = 3.1415926535897932384626433832795;
        
        std::cout << std::endl;
        std::cout << "a (default precision(6)) : " << a <<  std::endl;
        std::cout << std::setprecision(10);
        std::cout << "a (precision(10)) : " << a << std::endl;
        std::cout << std::setprecision(20);
        std::cout << "a (precision(20)) : " << a << std::endl;
        
        // 자릿수가 타입이 지원하는 것보다 크면 쓰레기 값을 출력함
        
        //===================================================================
        std::cout << std::endl;
    
        // showpoint 및 noshowpoint : 필요한 경우 뒤에 0을 표시
        // 소수점을 강제로 출력
        
        double d {34.1};
        double e {101.99};
        double f {12.0};
        int g {45};
        
        std::cout << std::endl;
        std::cout << "noshowpoint (default) : " << std::endl;
        std::cout << "d : " << d << std::endl;
        std::cout << "e : " << e << std::endl;
        std::cout << "f : " << f << std::endl; // 12
        std::cout << "g : " << g << std::endl;
        
        std::cout << std::endl;
        std::cout << "showpoint: " << std::endl;
        std::cout << std::showpoint;
        std::cout << "d : " << d << std::endl;
        std::cout << "e : " << e << std::endl;
        std::cout << "f : " << f << std::endl; // 12.0
        std::cout << "g : " << g << std::endl;
    
        return 0;
    }

    출력 결과

    위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다:

    HelloWorld
    -------------
    Hello
    World
    
    Hello
    World
    
    This is a nice message....
    
    Unformatted table : 
    Daniel Gray 25
    Stanley Woods 33
    Jordan Parker 45
    Joe Ball 21
    Josh Carr 27
    Izaiah Robinson 29
    
    Formatted table : 
      Lastname Firstname  Age
        Daniel      Gray   25
       Stanley     Woods   33
        Jordan    Parker   45
           Joe      Ball   21
          Josh      Carr   27
        Izaiah  Robinson   29
    
    Formatted table with variables: 
          Lastname     Firstname    Age
            Daniel          Gray     25
           Stanley         Woods     33
            Jordan        Parker     45
               Joe          Ball     21
              Josh          Carr     27
            Izaiah      Robinson     29
    
    
    Right justified table(default) :  
                Lastname           Firstname       Age
                  Daniel                Gray        25
                 Stanley               Woods        33
                  Jordan              Parker        45
                     Joe                Ball        21
                    Josh                Carr        27
                  Izaiah            Robinson        29
    
    Left justified table :  
    Lastname            Firstname           Age       
    Daniel              Gray                25        
    Stanley             Woods               33        
    Jordan              Parker              45        
    Joe                 Ball                21        
    Josh                Carr                27        
    Izaiah              Robinson            29        
    
    Internal justified : 
       -123.45
    -   123.45
    
    
    Table with fill characters :  
    Lastname************Firstname***********Age*******
    Daniel**************Gray****************25********
    Stanley*************Woods***************33********
    Jordan**************Parker**************45********
    Joe*****************Ball****************21********
    Josh****************Carr****************27********
    Izaiah**************Robinson************29********
    
    condition : 1
    other_condition : 0
    
    condition : true
    other_condition : false
    
    condition : 1
    other_condition : 0
    
    pos_num : 34
    neg_num : -45
    
    pos_num : +34
    neg_num : -45
    
    pos_num : 34
    neg_num : -45
    
    
    default base format : 
    pos_int : 717171
    neg_int : -47347
    double_var : 498.32
    
    pos_int in different bases : 
    pos_int (dec) : 717171
    pos_int (hex) : af173
    pos_int (oct) : 2570563
    
    neg_int in different bases : 
    neg_int (dec) : -47347
    neg_int (hex) : ffff470d
    neg_int (oct) : 37777643415
    
    double_var in different bases : 
    double_var (dec) : 498.32
    double_var (hex) : 498.32
    double_var (oct) : 498.32
    
    pos_int (nouppercase : default) : 
    pos_int (dec) : 717171
    pos_int (hex) : af173
    pos_int (oct) : 2570563
    
    pos_int (uppercase) : 
    pos_int (dec) : 717171
    pos_int (hex) : AF173
    pos_int (oct) : 2570563
    
    
    double values (default : use scientific where necessary) : 
    a : 3.14159
    b : 2006
    c : 1.34E-10
    
    double values (fixed) : 
    a : 3.141593
    b : 2006.000000
    c : 0.000000
    
    double values (scientific) : 
    a : 3.141593E+00
    b : 2.006000E+03
    c : 1.340000E-10
    
    double values (back to defaults) : 
    a : 3.14159
    b : 2006
    c : 1.34E-10
    
    
    a (default precision(6)) : 3.14159
    a (precision(10)) : 3.141592654
    a (precision(20)) : 3.141592653589793116
    
    
    noshowpoint (default) : 
    d : 34.100000000000001421
    e : 101.98999999999999488
    f : 12
    g : 55
    
    showpoint: 
    d : 34.100000000000001421
    e : 101.98999999999999488
    f : 12.000000000000000000
    g : 55

    결론

    C++에서 입출력 조작자는 출력 형식을 세밀하게 제어할 수 있는 강력한 도구입니다. 다양한 조작자를 통해 출력 형식을 맞춤 설정하여 가독성을 높이고, 특정 요구사항에 맞는 출력을 구현할 수 있습니다.

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

    티스토리툴바