[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
boost라이브러리 중에서 가장 많이 사용하는 기능인 BOOST_FOREACH()와 shared_ptr의 내부 구조를 분석합니다. 그리고 boost의 내부 구현에 사용된 이 기능을 프로그래밍에 응용하는 방법을 제시합니다.
* BOOST_FOREACH 구조 분석 및 응용
* shared_ptr 구조 분석 및 응용
boost라이브러리 중에서 가장 많이 사용하는 기능인 BOOST_FOREACH()와 shared_ptr의 내부 구조를 분석합니다. 그리고 boost의 내부 구현에 사용된 이 기능을 프로그래밍에 응용하는 방법을 제시합니다.
* BOOST_FOREACH 구조 분석 및 응용
* shared_ptr 구조 분석 및 응용
Por Fernanda Salles, Fernanda Salles Arquitetura.
Workshop Inserção do Transporte Sustentável no Morar Carioca, 10 e 11 de outubro 2011, Rio de Janeiro, Brasil.
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
모던 C++의 시초인 C++11은 C++ 코드 전반에 많은 변화를 가져왔습니다. 그리고 최근 C++20의 표준위원회 회의가 마무리되었습니다. 내년에 C++20이 도입되면 C++11이 처음 도입되었을 때와 비슷한 규모, 또는 그 이상의 변화가 있을 것이라고 예상하고 있습니다. C++20에는 Concepts, Contract, Ranges, Coroutine, Module 등 굵직한 기능 외에도 많은 기능들이 추가될 예정입니다. 이번 세션에서는 C++20에 추가될 주요 기능들을 살펴보고자 합니다.
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
파이썬 데이터과학 - 기초 과정(1일차)
- 데이터분석, 데이터시각화
- jupyter notebook, numpy, pandas, matplotlib, seaborn
2차 과정은 따로 올리겠습니다.
문의 및 제안 : se2n@naver.com
데이터 소스 : https://github.com/sh2orc/datascience
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
이미 많은 개발자들이 C#의 장점을 누리고 있으나, 본 PT에서는 높은 성능과 생산성을 동시에 달성하기 위해 C/C++로 개발된 native 게임 코드에 스크립트 언어로서 C#을 통합 할 수 있는 방법을 제시한다. 이를 위해 오픈소스 .Net 프레임웍인 Mono의 사용방법과 모바일 플랫폼에서의 특이사항들을 자세히 설명한다.
또한, C/C++언어에 C#을 비롯한 다양한 스크립트 언어를 효율적으로 혼합하여 게임을 구현할 수 있는 아키텍처를 제시한다. clang과 reflection을 이용하여 서로 다른 언어 간 인터페이스 노출을 자동화하고, 게임 내 오브젝트의 생명주기를 자동으로 관리할 수 있는 기법에 대해 설명한다.
5. 함수의 개념
• 인수를 전달 받아 일련의 작업을 수행한 뒤 그 결과를 반환하는 문장들의
집합.
• 언어에 따라 메소드(method), 프로시저(procedure) 등으로 불러지기도
한다.
• 간단히 수학에서의 함수를 생각하면 된다.
• C 프로그램은 이러한 함수들이 모여 이루어지게 된다.
F(x)?……!!
6. 함수의 필요성
• 반복되는 작업들을 함수로 작성함으로써 코드의 간략화.
• 간략화된 코드로 인한 가독성 증가.
• 코드의 모듈화를 통한 재사용 용이, 효율성 증대.
• 유지 관리 측면에 많은 이점 제공.
VS
8. 기본 정의법
int add(int a, int b)
{
int result;
result = a + b
return result;
}
반환형
함수 이름 매개 변수
함수 몸체
9. Q1. 간단한 함수 만들기
• 두 값을 넣으면 큰 값을 반환하는 bigger 함수를 만들어 보라. (단, main 함수는 작성
할 필요 없이, bigger 함수만 작성하도록 한다.)
10. A1. 간단한 함수 만들기
int bigger(int a, int b)
// 두 개의 int형을 매개변수로 받아 int형을 반환하는 bigger 함수
{
if(a>b) return a; // a가 b보다 크면 a를 반환
else return b; // 그 외의 경우 b를 반환
}
11. 함수 원형 이용(1)
• Q1의 전체 코드
#include <stdio.h>
int bigger(int a, int b)
{
if(a>b) return a;
else return b;
}
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("n%d is bigger.n", bigger(a, b));
}
12. 함수 원형 이용(2)
• 함수 원형을 이용한 코드
#include <stdio.h>
int bigger(int a, int b); // 함수원형!
int main(void) // main문이 위로 올라올 수 있다!
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("n%d is bigger.n", bigger(a, b));
}
int bigger(int a, int b)
{
if(a>b) return a;
else return b;
}
14. 함수의 호출
• 문법 : (함수명)((매개인자))
• Ex) add(1, 2);
• 매개인자로 넘겨준 데이터를 이용하여 함수 내부의 코드를 실행한다.
Void main()
{
…
add(1, 2);
…
bigger( 2, 3);
…
}
Int add(int a, int b)
{
…
…
}
Int bigger (int a, int b)
{
…
…
}
15. 값의 반환 (1)
• 함수를 통하여 얻어진 값을 반환하려면 ‘return’을 사용하면 된다.
• 또한 반환값은 함수의 반환형과 일치해야 한다.
Int add(int a, int b)
{
return a+b;
}
16. 값의 반환 (2)
• 단! 반환값은 오직 하나!
Int multi_add(int a, int b, int c)
{
return a+b, b+c, a+b+c;
}
17. 값의 반환 (2)
• 단! 반환값은 오직 하나!
Int multi_add(int a, int b, int c)
{
return a+b, b+c, a+b+c;
}
19. 지역변수 (1)
#include <stdio.h>
int add(int a, int b);
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("result : %dn", add(a, b));
}
int add(int x, int y)
{
int result;
result = x+y;
return result;
}
result 변수의 생존 기간
(add 함수 내에서만 생존!)
a,b 변수의 생존 기간
(add 함수 내에서는 적용되지 않는다!)
21. 전역변수
• 전역변수 : 함수 외부에서 선언되어 소스 파일 전체에서 사용되는 변수
#include <stdio.h>
int count = 0;
void main(void)
{
func();
printf(“%dn”, count);
}
void func(void)
{
count++;
}
22. 저장 유형 지정자 (1)
• Static : 지역변수를 고정시켜주는 지정자.
void main(void)
{
int i;
for(i=0; i<10; i++) printf(“%dn”, func());
}
int func(void)
{
static int count = 0;
count++;
return count;
}
23. 저장 유형 지정자 (1)
• Static : 지역변수를 고정시켜주는 지정자.
void main(void)
{
int i;
for(i=0; i<10; i++) printf(“%dn”, func());
}
int func(void)
{
static int count = 0;
count++;
return count;
}
24. 저장 유형 지정자 (2)
• register : 변수를 메모리가 아닌 CPU 내부의 레지스터에 저장
Ex)
register int i;
for(i=0; i<10000; i++) sum += I;
26. 암호화 프로그램의 함수화
1. 지난 세미나 때 만든 암호화 프로그램을 함수화 하세요.
1. 암호화 하는 부분을 함수화 합니다.
2. 평문(char plain[])을 매개 변수로 받아서 암호문(int
chipher[])으로 바꿔 넣어줍니다.
3. 다음과 같은 함수 원형을 사용합니다.
4. void Encrypted(char plain[], char key[], int
chipher[])
27. 암호화 프로그램의 함수화
2. 이번엔 복호화 함수도 만듭니다!
1. 이건 암호화의 역순으로 진행하면 되겠죠?
2. 암호문(int chipher[])을 받아서, 평문(char plain[])
으로 바꿔 넣어줍니다.
3. 다음과 같은 함수 원형을 사용합니다.
4. void Decrypted(int chipher[], char key[],
char plain[],);
28. 암호화 프로그램의 함수화
3. 메인 문에서 기능을 선택해 프로그램을 이용할 수 있도록 하세요.
1. 메뉴는 다음 과 같습니다.
1. 암호화
2. 복호화
3. 프로그램 종료
4. 제출일은 다음 주 토요일 정오, 4월 6일 12:00 까지 입니다!
제출은 dragonznet@naver.com 으로 하세요!