목록Language (49)
devseop08 님의 블로그
8.1 원시 타입과 기본 타입Int, Boolean, Any 등의 기본 타입을 살펴보자.자바와 달리 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다.원시 타입과 래퍼 타입을 구분하지 않는 이유와 코틀린 내부에서 어떻게 기본 타입에 대한 래핑이 이루어지는지 살펴보자.Object, Void 등의 자바 타입과 코틀린 타입 간의 대응 관계를 살펴보자8.1.1 정수, 부동소수점 수, 문자, 불리언 값을 원시 타입으로 표현코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다. 항상 같은 타입을 사용한다.컬렉션에 담는 래퍼 타입이 따로 있지 않다는 것이다.val i: Int = 1val list: List = listOf(1, 2, 3)래퍼 타입을 따로 구분하지 않으면 편리한데, 숫자 타입 등 원시 타입의 값에 대해 ..
생성자와 소멸자생성자처음 객체가 만들어졌을 때에는 그 객체의 초기 상태가 적절히 지정되어 있어야 한다.객체가 만들어질 때 반드시 수행해야 하는 초기화 과정을 실수로 누락하면 프로그램은 올바르게 동작하지 않는다. => 반드시 수행해야 하는 초기화 과정을 자동화할 필요가 있다.객체의 초기화 과정을 자동화하여 수행해줄 목적으로 사용하는 것이 바로 생성자이다생성자의 특징은 다음과 같다.특수한 멤버 함수객체가 생성될 때 자동으로 호출(객체 정의 시 자동 호출)초기화 목적으로 사용클래스와 동일한 이름을 갖는 멤버 함수반환 타입이 없다.오버로딩이 가능하다.생성자 선언(구현)class ClassName {public: // public으로 선언돼야지만 외부에서 해당 타입의 객체를 생성할 수 있다. Class..
식별자 규칙식별자의 첫 글자는 비숫자 문자를 사용할 수 있다. 비숫자 문자에는 영문 대소문자, 밑줄 문자('_')가 포함되며, C++11부터 다국어 문자도 포함된다.첫 글자 이후의 문자는 비숫자 문자와 숫자를 사용할 수 있다.표준에는 식별자 길이에 제한은 없다. 그러나 구현에 따라 식별에 사용되는 문자의 수가 정해지기도 한다.특수문자는 식별자에 포함될 수 없다. 다만 MS 비주얼 C++에서는 '$'를 사용할 수 있다.키워드는 식별자로 사용이 불가하다.auto 키워드변수를 선언할 때는 그 변수가 저장할 값의 타입(자료형)을 지정해야 한다.C++11의 자료형 추론을 활용하면 변수를 초기화하는 값의 타입에 맞게 변수를 선언할 수 있다.자료형 추론은 auto 키워드를 사용한다.auto i{10}; // int ..
클래스 파일의 구조모든 클래스 파일은 각각 하나의 클래스 또는 인터페이스를 정의한다.(단, package-info.class와 module-info.class는 특정 클래스나 인터페이스를 정의하지 않는다. 대신 해당 패키지와 모듈에 대한 정보를 기술)반면 클래스나 인터페이스를 꼭 파일에 담아둘 필요는 없다. 동적으로 생성하여 클래스 로더에 직접 제공할 수도 있다.일단 클래스나 인터페이스가 따라야 하는 형식을 '클래스 파일 형식'이라고 지칭하자클래스나 인터페이스가 디스크에 파일 형태로 존재할 필요는 없다.클래스 파일은 바이트를 하나의 단위로 하는 이진 스트림 집합체다.각 데이터 항목이 정해진 순서에 맞게, 구분 기호 없이 조밀하게 나열 => 클래스 파일 전체가 낭비되는 공간 없이 프로그램을 실행하는데 꼭 ..
객체지향 프로그래밍 개념절차지향과 객체지향절차지향 프로그래밍 방식은 데이터와 프로세스를 별도의 모듈에 위치시키는 프로그래밍 방식이다.데이터와 프로세스를 별도의 모듈에 위치시킴으로 인해서 생기는 문제함수(프로세스)가 데이터에 너무 의존적인 방식이기 때문에 데이터 구조가 변경될 시 함수의 수정이 필요하고, 이로 인한 변경의 영향을 지역적으로 고립시키기가 어렵다.프로그램 확장과 수정이 어려운 구조이다.현실 세계의 비즈니스 모델과 괴리가 발생하는, 즉 우리의 직관에 위배되는 프로그램 구조를 갖게 된다. 즉, 이해하기 어렵다.절차지향 프로그래밍 방식의 문제점들을 개선하기 위해 객체지향 프로그래밍 방식이 도입됐다.객체지향 프로그래밍 방식은 데이터와 프로세스를 동일한 모듈 내부에 위치시키는 프로그래밍 방식이다.객체지..
1. 배열동일한 타입의 데이터를 저장할 수 있는 공간을 연속적으로 여러 개 묶어 하나의 이름을 갖는 변수로 만들고,각각의 원소를 첨자로 지정하는 것복합 데이터 타입(compound data type)개별 요소들에 직접적인 접근특징고정된 길이연속된 메모리 주소에 저장인덱스를 통해 접근 가능인덱스는 0부터 시작, 마지막 인덱스는 size - 1out of bound 체크를 하지 않는다.초기화가 필요하다.효율적인 데이터 구조요소를 빠르게 읽는데 유리배열 선언과 초기화int scores[5];배열 길이를 const 상수로 정의할 수 있다.const int CONSTANT_VALUE = 5;int scores[CONSTANT_VALUE];배열 길이를 const 상수가 아닌 변수로 정의하는 것은 불가하다.int v..
C++ 프로그램 빌드컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 명령으로 번역하는 과정목적 파일: 컴파일러가 하나의 번역 단위를 컴파일한 결과 만들어진 목적 코드를 저장하는 파일라이브러리: 프로그램을 작성할 때 사용할 수 있는 클래스나 값, 함수 등을 모아놓은 것링크 : 목적 파일과 라이브러리를 연결하여 실행 파일을 만드는 작업컴파일과 링크를 통해 실행 파일을 만드는 전 과정 통틀어 프로젝트 빌드란 한다.C++ 프로그램 기본 구조#include int main(){ // 표준 출력 스트림으로 문장을 출력 std::cout 전처리 지시문C++ 소스 프로그램은 컴파일 되기 전에 먼저 전처리 과정을 거친다.전처리는 소스 프로그램을 가공하여 실제로 컴파일러가 번역할 소스 프로그램을 만드는 과정으로..
람다식 또는 람다는 기본적으로 다른 함수에 널길 수 있는 작은 코드 조각을 의미한다.람다를 사용하면 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다.람다가 무엇인지 알아보자람다 함수의 전형적인 사용 패턴을 보고 코틀린에서 그런 사용 패턴의 모습을 논의해보자멤버 참조와 람다의 관계를 살펴보자람다를 자바 API나 라이브러리와 함께 사용하는 방법을 살펴보자함수형 인터페이스를 사용하는 방법을 살펴보자수신 객체 지정 람다를 알아보자5.1 람다식과 멤버 참조5.1.1 람다 소개: 코드 블록을 값으로 다루기코드에서 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 하는 경우가 자주 있다.익명 내부 클래스를 사용하면 코드를 함수에 넘기거나 변수에 저장할 수 있기는 하지만 상당히 번거롭다.이 문제를 해결하는 ..