🙌 Hello?

    Android Studio: viewBinding 사용법 (kotlin synthetics 대체)

    viewBinding viewBinding 요소를 build.grade 파일에 복사한다. android { ... viewBinding { enabled = true } } result_profile.xml 레이아웃 파일의 내용이 다음과 같다고 가정해보자. 이 경우 생성된 결합 클래스 이름은 ResultProfileBinding(name과 button 두 필드를 가짐)이 된다. (레이아웃 파일 이름을 카멜표기법으로 변환 후 끝에 Binding을 추가) 결합 클래스에는 상응하는 레이아웃 파일의 루트 뷰에 관한 직접 참조를 제공하는 getRoot() 메서드가 포함된다. (ResultProfileBinding 클래스의 getRoot()메서드는 LinearLayout 루트 뷰를 반환한다.) Activity에서 ..

    C++ 정리 - 49 (copy(), ostream_iterator, istream_iterator, 기타 유용한 이터레이터들)

    copy(), ostream_iterator, istream_iterator 하나의 컨테이너에서 다른 컨테이너로 데이터를 복사하는 copy()라는 알고리즘이 있다. 이 알고리즘은 이터레이터들로 표현된다. ex) int casts[10] = {6,7,2,9,4,11,8,7,10,5}; vector dice[10]; copy(casts,casts+10,dice.begin()); //배열을 백터에 복사 copy() 함수는 목적지 컨테이너에 있는 기존의 데이터 위에 쓴다. 그리고 목적지 컨테이너는 복사되는 함수들을 저장할 수 있을 만큼 충분히 커야 한다. STL은 ostream_iterator 템플릿을 통해 출력 스트림을 나타내는 이터레이터를 제공한다. iterator 헤더 파일을 포함시키고 다음과 같이 선언함..

    C++ 정리 - 48 (표준 템플릿 라이브러리, 컨테이너, 알고리즘, 이터레이터, 함수 객체, vector 템플릿 클래스, Range에 기초한 루프(c++11))

    표준 템플릿 라이브러리 표준 템플릿 라이브러리(STL; Standard Template Library)는 컨테이너, 이터레이터, 함수 객체, 알고리즘을 나타내는 템플릿들의 집합을 제공한다. 컨테이너는, 배열과 같이, 여러 개의 값을 저장할 수 있는 구성단위이다. STL 컨테이너는 같은 종류의 값들을 저장한다. 알고리즘은, 배열을 정리하거나 리스트에서 특정 값을 검색하는 것과 같은, 특별한 작업들을 수행하기 위해 사용하는 방법이다. 이터레이터는, 배열 안에서 포인터를 사용하여 위치를 옮기듯이, 컨테이너 안에서 위치를 옮길 수 있도록 도와주는 객체들이다. 함수 객체는 함수와 비슷한 역할을 하는 객체이다. 함수 객체는 클래스 객체일 수도 있고, 함수 포인터일 수도 있다. STL을 사용하여 배열, 큐, 리스트와..

    C++ 정리 - 47 (스마트 포인터 템플릿 클래스, auto_ptr 템플릿, 스마트 포인터 고려사항, auto_ptr 보다 unique_ptr이 더 좋은 이유, unique_ptr을 사용하는 경우, 스마트 포인터 선택)

    스마트 포인터 템플릿 클래스 smart pointer는 포인터처럼 행동하는 클래스 객체지만, 몇 가지 추가 기능을 지닌다. 동적 메모리 대입을 관리하기 위한 스마트 포인터 템플릿에 대해 알아보자 스마트 포인터의 사용 3개의 스마트 템플릿 (auto_ptr, unique_ptr, shared_ptr)은 각각 new를 통해 얻어지는 주소를 대입할 포인터를 정의한다. 스마트 포인터가 수명을 다했을 때, 파괴자는 delete를 사용하여 메모리를 해제한다. 따라서 만일 new가 리턴하는 주소를 위 세 개의 객체 중 하나에 대입하게 되면, 나중에 메모리를 해제할 필요가 없으며, 스마트 포인터 객체가 수명이 다했을 때, 자동적으로 메모리가 해제된다. 이러한 스마트 포인터 객체들 중 하나를 생성하기 위해서는 템플릿을 ..

    C++ 정리 - 46 (string : c++11 생성자들, string 클래스 입력, 문자열 작업, 오버 로딩된 find() 메서드)

    -string : c++11 생성자들 string(string && str) noexcept 생성자는 str이 반드시 const로 취급되는 것이 아니다. 이런 형태의 생성자를 이동 생성자라 한다. 컴파일러는 경우에 따라 복사 생성자 대신에 이동 생성자를 사용할 수 있다. string(initializer_list il) 생성자는 string 클래스의 리스트 초기화를 가능하게 한다. string piano_man = {'L','i','s','z','t'}; string 클래스 입력 c스타일의 문자열에 대해서는 세 가지 입력 옵션을 사용할 수 있다. char info[100]; cin>>info; //한 단어를 읽는다. cin.getline(info,100); //한 행을 읽되, \n은 내버린다. cin.g..

    C++ 정리 - 45 (RTTI, dynamic_cast 연산자, typeid 연산자와 type_info 클래스, 데이터형 변환 연산자, string 클래스)

    RTTI RTTI는 'runtime type identification'의 약자로, 실행 시간 데이터형 정보라는 뜻이다. RTTI의 목적은 프로그램이 실행 도중에 객체의 데이터형을 결정하는 표준 방법을 제공하는 것이다. RTTI의 동작 방식 c++는 RTTI를 지원하는 세 가지 요소를 가지고 있다. dynamic_cast 연산자는, 가능하다면 기초 클래스형을 지시하는 포인터로부터 파생 클래스형을 지시하는 포인터를 생성한다. 가능하지 않다면, 널 포인터인 0을 리턴한다. typeid 연산자는 어떤 객체의 정확한 데이터형을 식별하는 하나의 값을 리턴한다. type_info 구조체는 어떤 특별한 데이터형에 대한 정보를 저장한다. RTTI는 가상 함수들을 가지고 있는 클래스에 대해서만 사용할 수 있다. -dyn..

    C++ 정리 - 44 (exception 클래스, stdexcept 예외 클래스, bad_alloc 예외와 new, 예외, 클래스, 상속, 잘못된 예외)

    exception 클래스 c++ 예외들의 주목적은, 오동작을 방지하는 프로그램을 설계할 수 있도록 언어 차원에서 자원하는 것이다. 최신 c++ 컴파일러들은 언어 자체에 예외들을 포함시키고 있다. 예를 들어, exception 헤더 파일은 다른 예외 클래스들의 기초 클래스로 사용하는 exception 클래스를 정의한다. 또한 사용자가 작성하는 코드는 exception 객체를 발생시키거나, exception 클래스를 기초 클래스로 사용할 수 있다. what()이라는 하나의 가상 멤버 함수가 주어진다. 그것은 시스템의 특성에 따라 하나의 문자열을 리턴한다. 그러나, 이 메서드는 가상이기 때문에, exception 클래스로부터 파생된 클래스 안에서 재정의 할 수 있다. #include class bad_hmea..

    C++ 정리 - 43 (abort() 호출, 예외 메커니즘, 예외로 객체 사용하기, c++11에서의 예외 규격, 스택 풀기, 예외의 그 밖의 기능)

    예외 abort() 호출 한 매개변수가 다른 한 매개변수의 부정이면, 그 함수가 abort() 함수를 호출하게 만드는 것이다. abort() 함수의 원형은 cstdlib(또는 stdlib.h) 헤더 파일에 들어있다. 일반적으로 abort() 함수는, 호출되었을 때 표준 에러 스트림 (cerr가 사용하는 스트림)에 메시지를 보내고 프로그램을 종료시키도록 구현되어 있다. 또한 다른 프로그램에 의해 기동 된 경우, 그 프로그램의 부모 프로세스나 운영체제에 컴파일러에 종속적인 어떤 값을 리턴한다. 이때 abort()가 파일 버퍼를 비우는지 여부는 c++ 시스템마다 다르다. 원한다면 exit()를 사용하여 메시지를 출력하지 않고, 파일 버퍼만 지울 수 있다. 예외 메커니즘 예외를 발생시킨다. 핸들러를 사용하여 예..

    C++ 정리 - 42 (프렌드 클래스, 프렌드 멤버 함수, 내포 클래스)

    프렌드 클래스 다음 구문은 Remote를 프렌드 클래스로 만든다. friend class Remote; 프렌드 선언은 public, private, protected 부분 어디에나 둘 수 있다. 프렌드 멤버 함수 클래스 전체를 프렌드로 만드는 대신, 원하는 메서드들만 다른 클래스에 대해 프렌드로 만드는 것이 가능하다. Remote::set_chan()을 Tv 클래스에 대해 프렌드로 만드는 방법은, Tv 클래스 선언 안에 그것을 프렌드로 선언하는 것. class Tv { friend void Remote::set_chan(Tv &t,int c); ... } 그러나 컴파일러가 이 구문을 처리하려면 Remote 정의를 미리 알고 있어야 한다. 사전 선언을 사용해 이 문제를 해결할 수 있다. class Tv; ..

    C++ 정리 - 41 (템플릿 구체화, 멤버 템플릿, 매개변수 템플릿, 템플릿 클래스와 프렌드 함수, 템플릿 클래스에 대한 바운드 템플릿 프렌드 함수, 템플릿 클래스에 대한 언바운드 템플릿 프렌드 ..

    템플릿 구체화 -암시적 구체화 사용하기 원하는 데이터형을 나타내는 하나 또는 그 이상의 객체를 선언하면 컴파일러는 포괄적인 템플릿이 제공하는 설계도를 사용하여 하나의 특수화된 클래스 정의를 생성한다. ArrayTP stuff; //암시적 구체화 -명시적 구체화 키워드 template을 사용하여 클래스를 선언하고, 사용하려는 데이터형을 나타냈을 때, 컴파일러는 명시적 구체화를 생성한다. template class ArrayTP; ArrayTP이 클래스라고 선언한다. 이 선언은 템플릿 정의와 동일한 이름 공간 안에 있어야 한다. -명시적 특수화 명시적 특수화는 포괄적인 템플릿 대신에, 사용하려는 특정한 데이터형을 위한 정의이다. 포괄적인 데이터형 대신 구체적인 하나의 데이터형에 맞게 정의된 템플릿 형식을 취..