이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
Sorry. for koreans only. I'll add english short description. or just visit http://wtfjs.com
아오 썅.
정정사항입니다.
객체 동일비교는 항상 valueOf 결과물로 나온 비교로 하는 데다가,
객체와 배열은 valueOf 해봐야 객체로 나오기 때문에
객체와 배열은 == 하나 === 하나 같은 비용으로 비교합니다.
[1,2,3]==[1,2,3] 은 false가 되므로
[1,,,2]==[1,undefined,undefuned,2] 는 무조건 false로 나옵니다.
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
boost라이브러리 중에서 가장 많이 사용하는 기능인 BOOST_FOREACH()와 shared_ptr의 내부 구조를 분석합니다. 그리고 boost의 내부 구현에 사용된 이 기능을 프로그래밍에 응용하는 방법을 제시합니다.
* BOOST_FOREACH 구조 분석 및 응용
* shared_ptr 구조 분석 및 응용
Sorry. for koreans only. I'll add english short description. or just visit http://wtfjs.com
아오 썅.
정정사항입니다.
객체 동일비교는 항상 valueOf 결과물로 나온 비교로 하는 데다가,
객체와 배열은 valueOf 해봐야 객체로 나오기 때문에
객체와 배열은 == 하나 === 하나 같은 비용으로 비교합니다.
[1,2,3]==[1,2,3] 은 false가 되므로
[1,,,2]==[1,undefined,undefuned,2] 는 무조건 false로 나옵니다.
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
boost라이브러리 중에서 가장 많이 사용하는 기능인 BOOST_FOREACH()와 shared_ptr의 내부 구조를 분석합니다. 그리고 boost의 내부 구현에 사용된 이 기능을 프로그래밍에 응용하는 방법을 제시합니다.
* BOOST_FOREACH 구조 분석 및 응용
* shared_ptr 구조 분석 및 응용
애플사의 새로운 프로그래밍 언어인 Swift 언어에 대해 개발자들의 관심이 커지고 있습니다. 본 발표에서는 실제 예제를 통해서 Swift의 함수와 메소드에 대해 알아보고, 튜플을 이용한 다중 변수 리턴기능과 제너릭등에 대한 재미있는 기능도 알아보겠습니다.
2014년 7월 19일 모바일 앱 개발자 포럼 발표자료를 공유합니다.
http://github.com/ipkn/crow
Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다.
C++11 features used in Crow
video:
http://youtu.be/MixS9c3mE6U
https://vimeo.com/119627253
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
2. 김코딩
스마트에디터 3.0, 프론트엔드 개발 - @네이버
기술 블로그(huns.me)에 아주 가끔 글 쓰기
페이스북 커뮤니티 프론트엔드개발그룹 운영하는 척
네이버 사내 리액트 미트업 운영하는 척
Facebook은 React를 왜 만들었을까 - @FBDG 2015
Angular2 vs React, React vs Angular2 - @Deview 2016
3. 오늘의 주제는 …
단위 테스트 어떻게 작성하나요?
TDD, 왜 해요?
TDD 하면 뭐가 좋아요?
TDD 하면 설계를 잘 할 수 있나요?
TDD 하면 클린 코드를 작성할 수 있나요?
TDD 하는 모습이 궁금해요
4. 오늘의 주제는 …
단위 테스트 어떻게 작성하나요?
TDD, 왜 해요?
TDD 하면 뭐가 좋아요?
TDD 하면 설계를 잘 할 수 있나요?
TDD 하면 클린 코드를 작성할 수 있나요?
TDD 하는 모습이 궁금해요
5. 오늘 만들 녀석은,
“막막” 간단한 Spinbox
기본값은 200
값 입력
증가 버튼을 클릭하여 값이 1 증가
감소 버튼을 클릭하면 값이 1 감소
84. it('증가 버튼을 세 번 클릭하여 값을 3 증가시킬 수 있다.', () => {
// given
const defaultValue = 200;
// when
const incrementBtn = spinbox.find('[data-name="increment"]');
incrementBtn.simulate('click');
incrementBtn.simulate('click');
incrementBtn.simulate('click');
// then
const actualValue = getValueFromInputNode(spinbox.find('input'));
expect(actualValue).toEqual(defaultValue + 3);
});
90. it('스핀박스를 생성하면 기본값은 200이어야 한다.', () => { … });
it('입력 폼에 999를 입력할 수 있다.', () => { … });
it('입력 폼에 0을 입력할 수 있다.', () => { … });
it('증가 버튼을 클릭하여 값을 1 증가시킬 수 있다.', () => { … });
it('증가 버튼을 세 번 클릭하여 값을 3 증가시킬 수 있다.', () => { … });
91. describe('기본값 >', () => {
it('스핀박스를 생성하면 기본값이 200이어야 한다.', () => { … });
});
describe('값 입력 >', () => {
it('입력 폼에 999를 입력할 수 있다.', () => { … });
it('입력 폼에 0을 입력할 수 있다.', () => { … });
});
describe('값 증가 >', () => {
it('증가 버튼을 클릭하여 값을 1 증가시킬 수 있다.', () => { … });
it('증가 버튼을 세 번 클릭하여 값을 3 증가시킬 수 있다.', () => { … });
});
92.
93. describe(‘값 입력 >', () => {
it('입력 폼에 999를 입력할 수 있다.', () => {
// given
// when
const input = spinbox.find('input');
// … 생략
});
it('입력 폼에 0을 입력할 수 있다.', () => {
// given
// when
const input = spinbox.find('input');
// … 생략
});
});
94. describe(‘값 입력 >', () => {
let input;
beforeEach(() => {
input = spinbox.find('input');
});
it('입력 폼에 999를 입력할 수 있다.', () => { … });
it('입력 폼에 0을 입력할 수 있다.', () => { … });
});
95.
96. describe(‘기본값 >', () => {
it('스핀박스를 생성하면 기본값이 200이어야 한다.', () => { … });
});
describe('값 입력 >', () => {
let input;
beforeEach(() => {
input = spinbox.find('input');
});
it('입력 폼에 999를 입력할 수 있다.', () => { … });
it('입력 폼에 0을 입력할 수 있다.', () => { … });
});
describe('값 증가 >', () => {
const defaultValue = 200;
let incrementBtn;
beforeEach(() => {
incrementBtn = spinbox.find('[data-name="increment"]');
});
it('증가 버튼을 클릭하여 값을 1 증가시킬 수 있다.', () => { … });
it('증가 버튼을 세 번 클릭하여 값을 3 증가시킬 수 있다.', () => { … });
});
97.
98. 얻는 것과 잃는 것
변경의 포인트는 집중
코드는 덜 직관적
it('증가 버튼을 세 번 클릭하여 값을 3 증가시킬 수 있다.', () => {
// given
// when
incrementBtn.simulate('click');
incrementBtn.simulate('click');
incrementBtn.simulate('click');
// then
const actualValue = getValueFromInputNode(spinbox.find('input'));
expect(actualValue).toEqual(defaultValue + 3);
});
뭘까?
99. 네 번째 요구사항
기본값은 200
값 입력
증가 버튼을 클릭하여 값이 1 증가
감소 버튼을 클릭하면 값이 1 감소
100. describe('값 증가 >', () => {
const defaultValue = 200;
let incrementBtn;
beforeEach(() => {
incrementBtn = spinbox.find('[data-name="increment"]');
});
it('증가 버튼을 클릭하여 값을 1 증가시킬 수 있다.', () => {
// given
// when
incrementBtn.simulate('click');
// then
const actualValue = getValueFromInputNode(spinbox.find('input'));
expect(actualValue).toEqual(defaultValue + 1);
});
});
101. describe('값 감소 >', () => {
const defaultValue = 200;
let decrementBtn;
beforeEach(() => {
decrementBtn = spinbox.find('[data-name="decrement"]');
});
it('감소 버튼을 클릭하여 값을 1 감소시킬 수 있다.', () => {
// given
// when
decrementBtn.simulate('click');
// then
const actualValue = getValueFromInputNode(spinbox.find('input'));
expect(actualValue).toEqual(defaultValue - 1);
});
});
109. it('감소 버튼을 세 번 클릭하여 값을 3 감소시킬 수 있다.', () => {
// given
// when
decrementBtn.simulate('click');
decrementBtn.simulate('click');
decrementBtn.simulate('click');
// then
const actualValue = getValueFromInputNode(spinbox.find('input'));
expect(actualValue).toEqual(defaultValue - 3);
});