코코아 앱 따라하기 – 2

지난 글에서 만든 TTS 앱을 조금 개선해보자. 이 앱에는 Start, Stop 두 개의 버튼이 있다. 그런데 두 버튼은 모두 활성화된 상태가 된다. 따라서 앱이 텍스트를 읽고 있지 않은 경우에도 stop 버튼을 클릭할 수 있고, 또 앱이 텍스트를 읽고 있는 중간에 start 버튼을 반복적으로 클릭할 수 있게 된다. 이 상황을 멋지게 해결하기 위해서는 버튼의 활성화 상태를

프로젝트 오일러 69

69번 풀이를 빼먹고 70번을 넘어갔었다. 69번 문제는 오일러 피 함수에 관한 문제인데, 문제를 주의깊게 읽어보면 사실 피 함수를 작성하는 것이 목적이 아니다. 오일러의 피(phi)함수 φ(n)은 n보다 작거나 같으면서 n과 서로 소인 숫자의 개수를 나타냅니다. 예를 들어, 9보다 작거나 같으면서 9와 서로 소인 것은 1, 2, 4, 5, 7, 8이므로 φ(9)=6이 됩니다. n 서로 소인 수 φ(n) n/φ(n)

SQLite3에서 트리거 설치하기

트리거는 데이터 베이스 내에 특정한 동작이 수행될 때, 연관된 다른 쿼리를 자동으로 실행하는 기능이다. SQLite3에서도 트리거를 지원한다. 이러한 트리거는 언제 활용될 수 있을끼? 예를 들어 게시판을 관리하는 테이블이 하나 있다고 가정하자. 이 테이블에서 전체 글 수를 조회하려면 흔히 count() 함수를 써서 다음과 같이 조회할 수 있다. SELECT count(*) FROM BOARD; 이런 쿼리를 작성할 때 흔히 간과하는 문제는

델리게이트 패턴에서 제네릭으로 – Swift

(제목이 스포일러이긴한데…) 간단한 클래스를 하나 작성해보자. 0으로 시작하는 값에서 메소드를 하나를 호출하면 그 값을 1씩 증가시켜나가는 것이다. class Counter {   var value: Int = 0   func increase() {     value += 1     print(“value: \(value)”)   } } 현실적으로는 별 쓸 데 없는 이 클래스를 사용하려 할 때, 값이 변할 때 수행하는 동작을 입맛에 맞게 커스터마이징하고 싶은 경우가 있을 수 있다. 물론 increase() 메소드를 그 때 그 때마다 변경하면