Language

[C++] auto 키워드
·
Language/C & C++
auto C++11부터 선언 초기화 식에서 추론되는 형식으로 변수를 선언하는 역할을 한다. C++11 이전까지는 스택에 할당되는 지역 변수를 선언하는 키워드였다. 따라서 C++ 버전에 따라 달리 동작할 수 있으니 주의해야 한다.복잡한 변수 선언을 간소하게 하고, 이름이 긴 자료형이나 헷갈릴 수 있는 자료형을 선언할 때 실수를 줄일 수 있다는 장점이 있다.예를 들어 아래와 같은 코드가 있다고 가정하자.#include using namespace std;class ClassNameThatIsUnnecessarilyLong { ...}int main() { ClassNameThatIsUnnecessarilyLong temp; ClassNameThatIsUnnecessarilyLong* ptem..
[C++] 표준 템플릿 라이브러리(STL)
·
Language/C & C++
STL STL(Standard Template Library)은 C++에서 제공하는 표준 템플릿 라이브러리로, 다양한 자료구조와 알고리즘을 템플릿 형태로 제공한다.STL은 효율적이고 재사용 가능한 코드를 작성할 수 있도록 돕는 강력한 라이브러리로, 크게 컨테이너, 반복자(iterator), 알고리즘의 세 가지 주요 구성 요소로 이루어져 있다. STL container • vector#include 벡터는 가변 크기의 배열을 일반화한 클래스로 다양한 자료형을 담을 수 있다. 원소의 저장, 삭제, 검색 등 다양한 멤버 함수를 지원하며 인덱스를 통해 접근 가능하다. 아래와 같이 선언하여 사용한다.vector vector_name;주요 멤버 함수는 다음과 같다.push_back(element)벡터 마지막에 el..
[C++] 템플릿(template)을 통한 일반화(generic)
·
Language/C & C++
함수 템플릿 어떤 함수를 중복 함수로 구현할 때 매개변수의 자료형이 int, double 형으로만 구분된다면, 동일한 코드 작성이 불가능하다. int, double 형으로만 예를 들었지만, 다양한 경우 함수 동작이 자료형과 관계없이 동작하는데 자료형 때문에 중복 함수로 구현이 불가능한 경우가 있다. 이때 템플릿을 사용하여 자료형을 일반화시켜 함수를 구현할 수 있다.예를 들어 아래와 같은 두 함수가 있다고 가정하자.void print(int a) { cout 간단한 코드이지만 매개변수로 받을 때 int 인지 double 인지 구분 불가능하기 때문에 중복해서 사용할 수 없는 함수들이다.이때 template 키워드를 이용하여 자료형을 일반화시켜 아래와 같이 함수를 일반화시킬 수 있다. 이를 제네릭 함수라..
[C++] virtual 키워드를 활용한 함수 오버라이딩 및 추상 클래스
·
Language/C & C++
함수 오버라이딩 (Function Overriding) 파생 클래스에서 기반 클래스의 함수와 동일한 이름의 함수를 정의하고 사용해야 할 수 있다. 이때 기반 클래스의 함수가 호출되면 의도한 함수가 아니라 다른 함수가 호출되는 것이므로 문제가 발생할 수 있고, 이를 방지해야 한다.예를 들어 아래와 같은 코드가 있다고 가정하자.#include using namespace std;class Base {public: void f() { cout f(); return 0;}출력은 다음과 같다.DerivedBase업캐스팅을 진행하면서 기반 클래스를 가리키게 되므로 업캐스팅된 포인터가 멤버 함수 호출시 기반 클래스의 멤버 함수가 호출되었다.그런데 앞서 언급한 것과 같이 업캐스팅을 하더라도 파생..
[C++] 업캐스팅(upcasting) 및 다운캐스팅(downcasting)
·
Language/C & C++
업캐스팅 업캐스팅은 기반 클래스 포인터로 파생 클래스의 객체를 가리키는 것을 말한다.예를 들어 기반 클래스와 파생 클래스가 아래와 같다고 가정하자.class Base {public: int data;};class Derived : public Base {public: string name;};이때 다음과 같이 업캐스팅을 해줄 수 있다.Base* b;Derived d;b = &d;혹은 간단하게 아래와 같이 사용하는 것도 가능하다.Base* b = new Derived();그냥 파생 클래스의 포인터를 사용하지 않고 기반 클래스로 업캐스팅해서 사용하는 것은 기반 클래스를 이용하는 파생 클래스가 다양한 경우 이 다양한 파생 클래스들을 업캐스팅을 통해 단일한 자료형으로 다룰 수 있기 때문이다.이렇게 단..
[Java] 업캐스팅(upcasting)과 다운캐스팅(downcasting)
·
Language/Java
업캐스팅 캐스팅은 자료형을 변환하는 것을 말한다. 보통은 자료형을 변형하는 일은 기본 자료형을 변환할 때, 예를 들어 int 형 변수를 double 형으로 변환할 때가 많지만, 어떤 클래스의 객체를 변환할 때도 있다.상속 관계가 있는 객체, 즉 자신의 부모 클래스가 있는 클래스의 객체가 있다고 가정하자. 이 객체를 부모 클래스의 객체로 변환하는 것이 업캐스팅이다.예를 들어 아래와 같은 클래스 관계가 있다고 가정하자.class ParentsClass { ...}class ChildClass extends ParentsClass { ....}그렇다면 아래와 같이 업캐스팅을 할 수 있다. 기본 생성자를 생성할 수 있다고 가정했다.ParentsClass p = new ChildClass();혹은 아래..
[Java] 클래스 상속(inheritance)
·
Language/Java
상속 상속이란 기존 클래스를 확장하는 개념으로 부모 클래스(parent class)의 속성과 기능을 자식 클래스(child class)에 물려주는 것이다. 즉 자식 클래스에서는 부모 클래스의 인스턴스 변수와 인스턴스 메소드를 사용할 수 있다. 단 부모 클래스의 인스턴스 변수와 인스턴스 메소드의 접근지정자가 private이거나, default인데 패키지가 다르다면 자식 클래스에서 접근이 안된다. 부모 클래스가 아니라 슈퍼 클래스(super class), 자식 클래스가 아니라 서브 클래스(sub class)라고도 한다.상속을 통해서 기반 클래스에 있는 멤버 변수와 멤버 함수를 그대로 사용할 수 있으니 파생 클래스에서는 멤버 변수와 함수를 간결하게 작성할 수 있고, 클래스들 간 구조적 관계를 파악하기도 용이하..
[Java] 접근 지정자(access modifier)
·
Language/Java
접근 지정자 접근 지정자는 말 그대로 접근을 지정하는 키워드이다. 객체지향에서 중요한 은닉을 달성하기 위해 사용된다. 접근 지정자가 아니라 접근 제어자, 접근 제한자라고도 하며, 이를 통해 접근 가능한 범위를  각각 지정할 수 있다.접근 지정자의 종류는 아래와 같다.public: 모든 다른 클래스에 허용한다.protected: 상속받은 클래스와 같은 패키지에 소속된 클래스에만 허용한다.default: 기본 제한자로 접근 지정자를 설정하지 않으면 default가 되며, 같은 패키지에 소속된 클래스에만 허용한다.private: 해당 클래스에만 허용한다.표로 보면 다음과 같이 허용된다.접근 지정자해당 클래스 내부같은 패키지자식 클래스모든 클래스publicOOOOprotectedOOOXdefaultOOXXpri..
[Java] 클래스(class)와 객체(object) 선언
·
Language/Java
클래스와 객체 선언 및 접근 클래스는 객체를 생성하기 위해 정의된 틀로 클래스 내에는 변수와 메소드가 존재한다. 메소드는 다른 언어에서는 함수라 불린다.객체는 클래스를 통해 생성된 것으로 클래스가 선언한 변수와 메소드를 사용할 수 있다. 이를 인스턴스(instance)라고도 부르고, 때문에 객체를 만드는 과정을 인스턴스화(instantiation)이라 부르며,따라서 객체가 가지고 있는 변수를 인스턴스 변수, 메소드를 인스턴스 메소드라 부르기도 한다. 하나의 클래스를 통해 여러 객체가 생성 가능하며, 이때 객체들은 각각의 인스턴스 변수를 가진다. 즉 클래스가 설계도라면 객체는 설계도로 만들어진 것이다.클래스는 class 키워드를 통해 만들 수 있다. 예를 들어 아래와 같이 사람이라는 클래스를 만들어보자.p..
[C++] 클래스 상속(inheritance) 및 다중 상속
·
Language/C & C++
상속 상속이란 기반 클래스(base class)의 속성과 기능을 파생 클래스(derived class)에 물려주는 것이다. 즉 파생 클래스에서는 기반 클래스의 멤버 변수와 멤버 함수를 사용할 수 있다. 단 기반 클래스의 멤버 변수와 멤버 함수의 접근지정자가 private이면 파생 클래스에서 접근이 안된다. 상속을 통해서 기반 클래스에 있는 멤버 변수와 멤버 함수를 그대로 사용할 수 있으니 파생 클래스에서는 멤버 변수와 함수를 간결하게 작성할 수 있고, 클래스들 간 구조적 관계를 파악하기도 용이하다는 장점이 있다. 또한 클래스 재사용도 쉬워진다.클래스 상속 기본 문법은 다음과 같다.class DerivedName : accessmodifier BaseName { ....};accessmodifier ..
애스터로이드
'Language' 카테고리의 글 목록 (2 Page)