개요scala는 함수형 언어이며 모든 것이 함수로 되어있다. 예를들면 1 + 2라는 연산은 1이 +라는 함수를 호출해서 2를 파라미터로 넘겨준다는 의미를 가지고 있는 것이다.// 1.+(2) 정도로 표현할 수 있겠다.scala에 어떤 종류의 함수들이 있고, 그 함수를 어떻게 사용하는지 알아보자. 기본 함수 정의기본적으로 사용자 함수를 만들기 위한 형식은 다음과 같다. def [func id]([param id]: [type], …): [type] = { [function] } 위 형식에서 함수 내용이 한줄 정도로 짧다면 {}를 생략할 수 있고, 반환 자료형을 명시하지 않아도 scala 컴파일러가 반환되는 값으로 자료형을 추론하기 때문에 문제가 되지 않는다.scala는 함수를 정의할 때 그 함수가 하나의 ..
개요scala의 변수는 우리가 흔히 생각하는 변수와 개념으로 사용하는 변수(var)와 변하지 않는 값을 의미하는 값(val)이 있다. 그중에서 scala는 값(val)사용을 지향하는 편이다.값(이하 val)은 선언과 동시에 초기화 할 때만 값이 정해지며 이후에 수정하려고 하면 컴파일 에러를 발생시켜, 코딩 단계에서 버그 발생 확률을 낮출 수 있다는 장점이 있다. 개념만 봤을 때 C++의 const 변수와 같다고 할 수 있다. 다만 하나의 함수에서 너무 많은 변환이 필요하다면 메모리를 고려하여 변수(이하 var)를 사용할 수도 있다. 또한 구조상 억지로 val을 사용하려고 했을 때 코드가 오히려 더 복잡해지는 경우에 제한적으로 var를 사용할 수 있다. 어디까지나 val을 지향하고 var를 지양 할 뿐 강..
Listscala에서 지원하는 collection중 하나로 연결 리스트를 생성하고 관리할 수 있다. List 생성scala는 List를 생성하는 여러 방법을 제공한다.일반적으로 List를 생성하는 코드는 다음과 같다. val numbers = List(1, 2, 3, 4, 5) 다음은 scala에서 정의한 ::연산자를 이용해 List를 생성하는 코드이다. val numbers = 1 :: 2 :: 3 :: 4 :: 5 :: Nil scala 문법이 그냥 이렇게 생겼다고 이해해도 되지만 왜 저런 생성이 가능한지 알아보자. Nil아무것도 들어있지 않은 empty List를 재정의한 표현이다. scala의 List는 마지막에 이 Nil을 넣어줘야 그 List가 거기까지 라고 인식한다. 연산자 ::c++의 연산..
구글에서 제공하는 프로토콜 버퍼를 설치하는 방법을 알아보자. 설치환경운영체제 : Windows10언어 : C++ 준비물CMakeVisual Studio 먼저 아래 링크를 통해 구글에서 오픈소스로 제공하는 프로토콜 버퍼를 다운받는다. Download protobuf 좌측에 있는 branch버튼을 클릭하고 원하는 버전을 선택한다.오른쪽에 clone or download를 클릭하고 Download to Zip으로 다운받는다.원하는 위치에 압축을 해제시킨다.ex) D:\Documents\protobuf-3.4.0\ 2.x 버전까지는 위처럼 소스를 다운받으면 컴파일 할 수 있도록 vsproject를 함께 제공해주었지만 3.x버전으로 올라오면서 vsproject를 더이상 포함시키지 않았다.따라서 CMake를 통해 ..
개요패킷을 보낼 때는 해당 패킷의 내용과 관계없이 send함수를 호출해서 패킷을 보내기만 하면 된다. 하지만 패킷을 받을 때는 상황이 좀 다르다. 받은 패킷이 어떤 패킷이냐에 따라 호출할 함수 또는 수행할 연산 등이 달라지므로, 그 때 그 때 적절한 동작을 수행할 수 있도록 만들어 주어야 한다.고민을 하던 중 cocos2d-x 엔진의 KeyboardListener가 생각이 났다. KeyboardListener는 내 class의 instance를 등록시켜 놓으면 내 class에 있는 KeyboardListener함수로 callback이 되도록 구성되어있다.덕분에 key event들을 한곳에서 처리하지 않고 필요한 객체에서 따로 처리할 수 있다.SocketListener를 구현해 보자.수신받은 패킷에서 꼭 ..
개요socket으로 네트워크 엔진 만들기 (1) 에서 만든 패킷을 활용하기 위해서 socket이 제공하는 함수들을 사용할 수도 있지만Packet을 보내거나 읽고, 읽은 내용을 파싱하여 필요한 함수를 호출할 수 있도록 하는 등 여러 기능들을 추상화시킨 class가 있으면 사용하기 편할 것이다.NetworkManager class를 만들어 보자.NetworkManager class의 이름은 network를 가장 잘 manage하는 생물인 Spider로 하자. network를 가장 잘 manage하는 사람 Spider - socket을 생성하고 연결하기Spider는 싱글톤으로 구현되어 프로그램에 유일하게 존재하며, 하나의 socket을 가지고 통신한다. 사용자는 ip, port를 설정하는 것으로 서버 또는 다..
개요socket에 대해 공부하다가 이 socket을 가지고 게임을 만들어보자는 생각이 들었다. 환경이 열악해서 상용 네트워크 엔진을 사용할 수 없기도 하고 배운 내용을 정리도 할 겸 처음부터 만들어보기로 했다. socket을 사용하는 네트워크 엔진을 만들어보자. 엔진은 c++로 작성하며, 기본적인 구성은 팩토리 패턴으로 생성할 수 있는 Packet class, 만들어진 Packet을 전송하는 Manager class 등이다. PacketPacket class는 기본적으로 함수 ID, parameter의 크기, parameter set의 갯수를 int형으로 가지고 있다.함수의 parameter들은 문자열 형태로 저장함으로써 여러 종류의 parameter에 대응할 수 있도록 추상화시킨다. 1234567891..
키(Key)데이터베이스에서 키의 종류는 여러가지가 있다. 아래와 같은 3개의 릴레이션이 있다고 가정해보자. 학생 릴레이션학번이름나이학과17-66503271김다현22실용음악과10-82765666김고은29연극영화과09-88754723김태리30연극영화과 메뉴 릴레이션번호이름가격1치즈돈까스40002라면20003김밥15004순대국밥4000 주문 릴레이션학번번호날짜17-6650327122019-03-1717-6650327132019-03-1709-8875472312019-03-1710-8276566642019-03-1809-8875472342019-03-18 슈퍼키(Super key)유일성을 만족하는 속성들의 집합. 이 키로 검색을 하면 유일한 튜플이 나와야 한다.ex_학생 릴레이션에서 {학번, 이름}, {학번, ..
- Total
- Today
- Yesterday
- SOCKET
- C/C++
- SHADER
- winsock
- C++
- rxswift
- Java
- 수학
- 데이터베이스
- C
- Cocos2d-x
- Git
- swift
- ios
- 자료구조
- 운영체제
- scala
- machine learing
- ue4
- DesignPattern
- mongoDB
- 알고리즘
- SwiftUI
- Spring
- JSP
- OS
- 드라마
- 국내여행
- game
- database
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |