이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다.
iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다.
본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
Presented at GoTo Night Zurich, June 12 2014
Many teams struggle with the implementation of user story acceptance criteria and establishing a shared understanding about the expected story outcomes. This results in missed stakeholder expectations and ad-hoc assumptions made by the team. High efforts for regression testing and the lack of a reliable documentation about the current system behavior are further problems resulting from an unstructured approach to define and validate acceptance criteria.
In this session, you will learn how specification-by-example addresses these problems and overall increases the level of clarity on the project end-to-end. The presentation will cover the theory and practical experience from real projects, with concrete implementation examples based on the Gherkin specification language, that can be used for automated specification validation (available for .NET, Java, Ruby, PHP, JavaScript).
You will leave this session with a fundamental understanding of specification-by-example and its benefits, as well as concrete pointers on how to get started using it in your own projects.
In this presentation, I will be having a closer look at how JVM works and how the JVM compilation process looks like. I will also mention GraalVM and its impact on the JVM.
2017년 3월 22일 re:View 1st Impact
"코드리뷰를 시작하려는 그대에게" 세션 발표 내용입니다
자세한 행사 내용은 아래 링크를 참고해주시기 바랍니다 ^^
https://reviewmeetup.wordpress.com/2017/03/11/review-1st-impact-20170322/
Presented at GoTo Night Zurich, June 12 2014
Many teams struggle with the implementation of user story acceptance criteria and establishing a shared understanding about the expected story outcomes. This results in missed stakeholder expectations and ad-hoc assumptions made by the team. High efforts for regression testing and the lack of a reliable documentation about the current system behavior are further problems resulting from an unstructured approach to define and validate acceptance criteria.
In this session, you will learn how specification-by-example addresses these problems and overall increases the level of clarity on the project end-to-end. The presentation will cover the theory and practical experience from real projects, with concrete implementation examples based on the Gherkin specification language, that can be used for automated specification validation (available for .NET, Java, Ruby, PHP, JavaScript).
You will leave this session with a fundamental understanding of specification-by-example and its benefits, as well as concrete pointers on how to get started using it in your own projects.
In this presentation, I will be having a closer look at how JVM works and how the JVM compilation process looks like. I will also mention GraalVM and its impact on the JVM.
2017년 3월 22일 re:View 1st Impact
"코드리뷰를 시작하려는 그대에게" 세션 발표 내용입니다
자세한 행사 내용은 아래 링크를 참고해주시기 바랍니다 ^^
https://reviewmeetup.wordpress.com/2017/03/11/review-1st-impact-20170322/
탑크리에듀교육센터(www.topcredu.co.kr)제공
15번째 스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)자료입니다.
Spring JDBC에서 DB 접근하는 방법, Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate, Maven, Gradle에서 오라클 설정에 대해 설명한 자료이니 많은 참고 바랍니다.
오픈서베이의 새로운 결과 분석 서비스인 오픈애널리틱스를 개발하던 중 발생한 자바 메모리 이슈를 계기로 미시적 관점에서 JVM 메모리 할당을 분석/정리했습니다.
구체적으로, Integer / Long 등의 Object 형 타입과, ArrayList, / LinkedList / Set 등의 자료구조의 메모리 사용을 JDK코드 분석과 각종 도구를 통해 측정하고, 이를 효과적으로 사용하기 위한 방법을 탐구합니다.
2019년 5월 23일 창원대학교 정보통신공학과 특강자료 입니다.
* 일 시 : 2019년 5월 23일 (목) 13:00 ~
* 장 소 : 창원대학교 51호관 328호실
* 강연자 : 한국전자통신연구원(ETRI) 김성수 책임연구원
* 주 최 : 창원산업진흥원
* 주 관 : 창원시 스마트모바일앱지원센터
이번 강의에서는 지난 7개월간 이어진 강의의 마지막 편으로 파이썬이 각광받고 있는 이유와 장점에 대해서 다루어 봅니다.
그리고 저의 개인적인 강의 경험도 알려드릴까 합니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
코딩 스타일은 파이썬의 아주 중요한 요소중 하나입니다.
이번 강의에서는 PEP-8 의 코딩 스타일 가이드 라인에 대해 자세히 살펴보고 pyCharm의 리포맷 기능에 대해서도 알아보겠습니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 방대한 파이썬 표준 라이브러리의 내용과 기능을 살펴보고 파이썬 외부 라이브러리에 대해서도 살펴보겠습니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 파이썬의 패키지를 만들고 활용하는 방법을 알아보겠습니다.
대규모 프로젝트를 수행하기 위해서는 이미 잘 만들어진 코드를 활용하는 것이 중요한데요, 잘 만들어진 코드를 활용하는 방법이 모듈을 사용하는 것입니다.
그러나 모듈의 수가 많아지면 폴더(디렉토리) 아래에 계층적으로 두는 것이 더욱 편리합니다.
한 폴더에 유사한 성격의 여러 모듈을 두고 이 폴더를 가져오는 방식으로 개발을 하는데 이 폴더를 패키지라고 합니다. 본 강의에서는 예제를 통해서 파이썬의 패키지 만드는 방법을 살펴보도록 하겠습니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 람다함수를 필터 함수와 맵 함수에서 사용하는 방법에 대해 살펴보겠습니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 람다함수에 대해 알아보겠습니다.
앞서 배운 함수를 이용하면 필요한 기능의 재사용이 가능하기 때문에, 함수를 정의한 후 필요할 때마다 호출하여 사용하면 편리한데 이러한 방식으로 프로그램을 하는 방식을 모듈화 프로그래밍 이라고 한다.
그러나 가끔씩은 함수를 만들지 않고 함수화된 기능만을 불러 사용하고자 할 경우가 있는데, 이렇게 하면 프로그램을 단순하게 만들 수 있다.
즉 1회용으로 함수를 만들고 싶은데 def xxx(): 과 같은 이름을 짓는 것이 번거롭게 느껴질 경우에 사용하는 것이 람다함수 혹은 람다표현식이다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 파이썬 클래스의 상속에 대해 알아보겠습니다. 소프트웨어 개발시에는 예전에 만들어진 코드를 이용하여 새로운 기능을 개발하는 경우가 많은데요, 클래스의 상속 기능을 사용하면 부모 클래스에서 만들어둔 기능과 속성을 물려받을 수 있습니다.
상속은 객체지향 프로그래밍의 매우 뛰어난 기능으로 이 강의에서는 상속에 대해 알아봅니다. 또한 상속받은 자식이 부모 클래스를 호출하기 위해 사용하는 super() 함수에 대해서도 알아봅니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 파이썬에서 클래스를 정의하는 문법과 self 에 대해 살펴보도록 하겠습니다.
그리고 .(마침표)연산자를 이용하여 인스턴스에서 메소드를 호출하는 방법도 살펴보겠습니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
슬라이싱(slicing)이란 리스트나 튜플, 문자열의 항목을 잘라서 일부만을 가져오는 기능을 말합니다.
보통 list[시작 : 끝] 과 같이 시작항목과 끝 항목의 인덱스를 지정하는 방식으로 사용하는데요, 시작 항목은 포함되지만 끝 항목은 포함되지 않습니다.
이번 강의에서는 파이썬의 슬라이싱을 이용하는 방법을 다양한 예제와 애니메이션으로 살펴보도록 하겠습니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 파이썬의 iterator에 대해 알아보겠습니다.
리스트, 집합, 딕셔너리와 같은 타입이나, 문자열은 for - in 구문을 통해서 반복적으로 하나씩 데이터를 꺼내서 처리할 수 있는데, 이와 같이 여러 개의 데이터를 포함한 타입중에서 반복적으로 하나하나 꺼내어 처리가능한 컬렉션이나 Sequence 들을 순환가능(Iterable) 객체라고 합니다.
iterator는 next() 함수를 구현한 객체를 말하며 next() 함수는 순환가능한 객체의 다음 원소를 반환하는 일을 합니다.
파이썬은 list, dict, set, bytes, tuple, range형이 iterable 형 객체입니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 동영상 강의에서는 리스트 함수에 대해 살펴보도록 하겠습니다. 앞 장 강의에서 min(), max()와 같은 간단한 리스트 함수를 살펴보았는데요, 이번 강의에서는 all(), any(), bool(), filter() 등의 고급 함수의 기능과 그 사용예를 살펴봅니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
이번 강의에서는 파이썬의 리스트 메소드에 대해 살펴보겠습니다.
파이썬의 리스트는 다양한 메소드를 제공하는데, 이 메소드를 통해 리스트의 원소를 변경하거나, 삭제, 추가, 병합, 정렬등의 기능을 할 수 있습니다.
또한, 파이썬의 기본 함수에서는 리스트의 원소의 길이, 최대값, 최소값, 분할을 위한 다양한 함수가 제공됩니다. 예제와 실습을 통해 index(), extend(), insert(), sort(), reverse()등의 메소드와 사용법을 알아보겠습니다.
79. 메모리-Heap 영역
동적할당 변수
• 프로그램 실행중에 Heap 영역으로부터 필요한 만큼 메모리를 할당받는다.
• 사용이 완료되면 시스템에 반납하여야 한다
• C언어에서는 malloc() 함수에 의해 할당
• C++ 언어에서는 new 키워드에 의해 할당
• Objective-C 언어에서는 alloc 메소드에 의해 할당
장점
• 효율적인 메모리 관리가 가능하다
단점
• 메모리 관리를 프로그래머가 책임지고 해야한다
80. 메모리-Stack 영역
지역변수
• 함수나 블럭안에서 정의되는 변수
• 함수가 종료되거나 프로그램이 종료되면 메모리 공간이 해제됨
• 함수가 받는 매개 변수나 함수내에서 사용되는 지역변수가 이 Stack 영역에 저장
( OS의 관리 )
118. NSObject NSNumberClassAClassB
ClassC의 Instance
obj isa
Stack Heap
Code
ClassC
-methodC
super
-methodB
super
-methodA
super
NSNumber *num=[[NSNumber alloc] init];
+alloc
NSNumber의 Instance
-init -init
+alloc
119. NSObject NSNumberClassAClassB
ClassC의 Instance
obj isa
Stack Heap
Code
ClassC
-methodC
super
-methodB
super
-methodA
super
NSNumber *num=[[NSNumber alloc] init];
+alloc
NSNumber의 Instance
num
-init -init
+alloc
120. NSObject NSNumberClassAClassB
ClassC의 Instance
obj isa
Stack Heap
Code
ClassC
-methodC
super
-methodB
super
-methodA
super
NSNumber *num=[[NSNumber alloc] init];
+alloc
NSNumber의 Instance
num
isa
-init -init
+alloc
121. NSObject NSNumberClassAClassB
ClassC의 Instance
obj isa
Stack Heap
Code
ClassC
-methodC
super
-methodB
super
-methodA
super
NSNumber *num=[[NSNumber alloc] init];
+alloc
NSNumber의 Instance
num
isa
super
-init -init
+alloc
289. Accessor Methods
// setter를 사용하게 되면 다음과 같은 validation(유효성) 검사가 가능하다
// 이를 통해 더욱더 안전한 데이터 사용이 가능하다
@implementation ClassA
...
- (void)setScore:(int)val {
if( val 0 )
score = 0;
else
score = val;
}
- (int)score {
return score;
}
@end
295. Property 속성지정
@property (getter=score, setter=setScore:) int score;
- (void)setScore:(int) val {
score = val;
}
- (int)score {
return score;
}
@synthesize score
// 위 문장은 아래 코드를 생성한다. setScore, score 메소드를 생성한다
296. Property 속성지정
@property (readonly, getter=score) int score;
@synthesize score
// 위 문장은 아래 코드를 생성한다
// readonly속성에 의해 setScore메소드는 생성하지 않는다
297. Property 속성지정
@property (readonly, getter=score) int score;
- (int)score {
return score;
}
@synthesize score
// 위 문장은 아래 코드를 생성한다
// readonly속성에 의해 setScore메소드는 생성하지 않는다
298. Property 속성지정
@property (readonly, getter=scoreValue) int score;
@synthesize score
// 위 문장은 아래 코드를 생성한다
// readonly속성에 의해 setScore메소드는 생성하지 않는다
// getter 메소드 scoreValue로 지정되어 있다
299. Property 속성지정
@property (readonly, getter=scoreValue) int score;
- (int)scoreValue {
return score;
}
@synthesize score
// 위 문장은 아래 코드를 생성한다
// readonly속성에 의해 setScore메소드는 생성하지 않는다
// getter 메소드 scoreValue로 지정되어 있다
300. Property 속성지정
@property (readonly) int score;
@synthesize score
// 위 문장은 아래 코드를 생성한다.
// 디폴트 getter 메소드 명은 속성값의 이름인 score이다.
// readonly 속성에 의해 setScore메소드는 생성하지 않는다.
301. Property 속성지정
@property (readonly) int score;
- (int)score {
return score;
}
@synthesize score
// 위 문장은 아래 코드를 생성한다.
// 디폴트 getter 메소드 명은 속성값의 이름인 score이다.
// readonly 속성에 의해 setScore메소드는 생성하지 않는다.
307. Property 속성지정
@property (nonatomic, retain) UIButton *scoreButton;
// nonatomic한 속성을 가진 scoreButton 메소드 생성
// atomic한 객체는 안정성을 보장해야 하므로 임의의 스레드가
// scoreButton 값을 사용하는 중에는 다른 스레드가 이 값에 대한 setter를
// 호출하지 못하도록 한다.
308. Property 속성지정
@property (nonatomic, retain) UIButton *scoreButton;
// nonatomic한 속성을 가진 scoreButton 메소드 생성
// atomic한 객체는 안정성을 보장해야 하므로 임의의 스레드가
// scoreButton 값을 사용하는 중에는 다른 스레드가 이 값에 대한 setter를
// 호출하지 못하도록 한다.
- (void)setScoreButton:(UIButton *)newButton {
if ( scoreButton != newButton ) {
[scoreButton release];
scoreButton = [newButton retain];
}
}
-(UIButton *)scoreButton
{
return scoreButton;
}
309. nonatomic vs atomic
쓰레드
- 어떠한 프로그램의 프로세스내에서 실행되는 흐름의 단위를 말함
- 한 프로그램 내에는 여러개의 쓰레드가 동작할 수 있음
- 하나의 값을 여러 쓰레드가 동시에 접근하여 변경하게 되면 문제가 발생
310. nonatomic vs atomic
atomic
- setter/getter는 다른 쓰레드 setter 메소드를 행하는 중에는
접근할 수 없도록 한다.(read-write safety)
- atomic한 접근을 보장하기 위해서는 수행 속도면에서 손해를 보게된다
nonatomic
- nonatomic 속성은 atomic한 기능을 보장하지 않는다
- 대신 수행속도가 빠르다
쓰레드 안정성(thread safety)
- atomic은 쓰레드 안정성을 보장해 주지는 않는다
- 즉 setter나 getter가 작동하는 중에 release가 이루어지게 되면
crash가 발생하는데 이러한 부분까지는 atomic한 속성으로 보장해 주지
않는다
316. Automatic Reference Counting
ARC
- 컴파일러 수준의 기능으로 객체의 참조 횟수를 추적하는 일을 프로그래머가 하지
않고 컴파일러가 대신 수행하는 형태로 메모리 관리기능을 보강한 것이다.
- Objective-C 언어자체의 기능은 아님
- 2011년 Mac OS X Lion과 iOS 5 운영체제에서 도입되었다
- Xcode 4.2부터 사용가능하다
317. ARC 규칙
ARC 사용시의 규칙은 다음과 같다
- retain, release, retainCount, autorelease, dealloc을 프로그
래머가 직접 호출할 수 없다
- id 형이나 void * 형을 직접 형변화시킬 수 없다
- NSAutoreleasePool 객체를 사용할 수 없다
- NSAllocateObject 와 NSDeallocateObject 함수를 호출할 수 없다
- C 구조체내의 객체 포인트를 사용할 수 없다
- 메모리 존(NSZone)을 사용할 수 없다
318. ARC 컴파일 옵션설정
ARC 사용시 컴파일 옵션 설정
- Project 시작시 Use Automatic Reference Counting을 체크
323. 객체간의 참조
ARC 기능-객체간의 참조 카운터를 자동으로 관리
객체간의 참조
- 1:1 참조 또는 1:n 참조가 가능
strong 참조
- 한 객체가 다른 객체를 strong 참조로 참조하고
있는 경우, 참조되고 있는 객체가 소멸되지 않는다.
weak 참조
- 한 객체가 다른 객체를 weak 참조로 참조하고
있는 경우, 참조되고 있는 객체의 생존은 보장되지 않는다