코틀린은 Getter와 Setter가 자동 생성됩니다. 예제를 보면서 이해해 봅시다. class Person { var age: Int = 0 val name: String // 생성자에서 이름을 받는다. constructor(name: String){ this.name = name } } 코틀린에서는 var로 선언하는 변수는 Getter, Setter 전부 생성되고, val로 선언하는 변수는 Getter만 선언됩니다. 테스트 코드를 작성하면서 확인해 봅시다. class KotlinTest { @Test fun testGetterSetter() { // 코틀린의 Person 객체를 생성하고 이름을 "jwlee" 나이를 19으로 설정 Person person = new Person("jwlee"); per..

우선순위 큐는 이름 그대로 우선순위를 고려하여 만든 큐이다. 우선순위 큐의 규현 방법에는 '배열, 연결리스트, 힙' 으로 총 3가지가 있다. 이 중에서 우선순위 큐는 힙으로 구현하는게 가장 효율이 좋다. 그 이유는 배열과 연결리스트의 경우 데이터의 추가, 삭제의 시간 복잡도가 O(n)인 반면, 힙의 경우에는 추가, 삭제의 시간 복잡도가 log2(n)이기 때문이다. 힙은 배열과 연결리스트 중에서 배열로 구현을 한다. 그 이유는 연결리스트로 구현을 하면 새로운 노드를 마지막 위치에 추가하기가 쉽지 않기 때문이다. 힙에서의 데이터 저장과정 위 그림을 보면 새로운 데이터를 마지막 위치에 저장한 후 부모 노드와 비교연산을 통해 제자리를 찾아가는 것을 알 수 있다. 힙에서의 데이터 삭제과정 위 그림을 보면 우선순위..
수식 트리수식 트리의 이해수식 트리는 이진 트리를 이용해서 수식을 표현해 놓은 것을 말한다. 따라서 수식 트리와 이진 트리는 구분이 되는 별개의 것이 아니다. 일반적으로 7 + 4 * 2 - 1과 같은 인간이 보기 좋은 수식(중위 표기법)은 컴퓨터가 이해하기 어렵다. 따라서 컴파일러는 이와 같은 수식을 수식 트리로 재 표현한 다음에 계산한다. 왜냐하면 수식 트리는 연산 과정에서 우선순위를 고려하지 않기 때문에 해석이 쉽기 때문이다. 아래는 중위 표기법을 수식 트리로 재 표현한 모습이다. 수식 트리의 계산 순서는 다음과 같다. 이렇듯 수식 트리는 연산의 순서가 명확하고, 연산의 과정을 쉽게 파악할 수 있는 이진 트리의 일종이다. 중위 표기법을 수식트리까지 옮기는 과정은 아래와 같다. 중위 표기법 -> 후위..
큐(Queue)원형 큐(Circular Queue)원형 큐는 배열의 선형 큐의 머리와 꼬리를 연결한 큐이다. 기본적으로 원리는 다음과 같다. EnqueueDequeue 이렇듯 추가를 하면 R(Rear)이 다음 인덱스를 가리키고 그 곳에 데이터를 추가한다. 삭제를 할 경우에는 F(Front)가 다음 인덱스로 이동한다. 여기서 위의 경우에는 Empty와 Full을 구분하기가 어렵다. 그래서 배열의 길이가 n일 때 n-1개 채울 경우 꽉 찬 것으로 간주한다. 원형 큐의 구현 헤더파일1234567891011121314151617181920212223242526#ifndef __C_QUEUE_H__#define __C_QUEUE_H__ #define TRUE 1#define FALSE 0 #define QUE_L..
정보은닉과 캡슐화정보은닉정보은닉은 멤버변수를 private로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서, 안전한 형태로 멤버변수의 접근을 유도하는 것이다. 간단한 예제를 봐 보자. 헤더 파일123456789101112131415161718#ifndef __POINT_H_#define __POINT_H_ class Point{private: int x; int y; public: bool InitMembers(int xpos, int ypos); int GetX() const; int GetY() const; bool SetX(int xpos); bool SetY(int ypos);}; #endifColored by Color Scriptercs 소스 파일123456789101112131415..
Inline 함수lnline함수를 의역해보면 프로그램 코드라인 안으로 들어가 버린 함수라는 뜻이 된다. 여기서 잠시 Inline함수에 대해 알아보기 전에 매크로 함수에 대해 알아보겠다. 매크로 함수의 장점매크로 함수의 대표적인 장점으로는 일반적인 함수에 비해서 실행속도의 이점이 있다는 점이다. 뿐만 아니라 매크로 함수는 성능향상에 많은 도움이 된다. 반면, 매크로 함수의 단점은 복잡한 함수를 매크로의 형태로 정의하는데 한계가 있다는 점이다. 매크로 함수를 예제 삼아 정의해 보면 다음과 같다. 1234567#include #define SQUARE(x) ((x)*(x)) int main(void) { std::cout
Component LifeCycle Method render() 함수이 메서드는 컴포넌트 모양새를 정의한다. 그렇기에 컴포넌트에서 가장 중요한 메서드라고 할 수 있다. 라이프사이클 메서드 중 유일한 필수 메서드이기도 하다. 이 메서드 안에서 this.prop와 this.state에 접근할 수 있으며, 리액트 요소를 반환한다. 요소는 태그가 될 수도 있기 따로 선언한 컴포넌트가 될 수도 있다. 아무것도 보여주고 싶지 않다면 nul값이나 false값을 반환하도록 한다. 그리고 이 메서드 안에서는 절대로 state를 변형해서는 안 되며, 웹 브라우저를 접근해서도 안 된다. DOM정보를 가져오거나 변화를 줄 때는 compoenentDidMount에서 처리해야 한다. constructor 메서드이것은 컴포넌트의 ..
컴포넌트의 라이플사이클 메서드MountDOM이 생성되고 웹 브라우저상에 나타나는 것을 마운트라고 한다. 이때 호출되는 메서드는 다음과 같다. constructor컴포넌트를 새로 만들 때 마다 호출되는 클래스 생성자이다. getDerivedStateFromPropsprops에 있는 값을 state에 동기화하는 메서드이다. render준비한 UI를 렌더링하는 메서드이다. componentDidMount컴포넌트가 웹 브라우저상에 나타난 후 호출되는 메서드이다. Update컴포넌트를 업데이트 할 때는 다음 네 가지 경우다. 1. props가 바뀔 때 2. state가 바뀔 때 3. 부모 컴포넌트가 리렌더링 될 때 4. this.forceUpdate로 강제로 렌더링을 트리거할 때 이렇게 컴포넌트를 업데이트 할 때..