코코아바인딩에서 집합 타입의 프로퍼티를 연결할 때 유의할 점

코코아 바인딩을 사용할 때 특정한 키 이름이 변경가능한 배열(NSMutableArray)일 때, UI를 통해 값을 추가/제거하거나 변경한다 하더라도 이러한 변경이 원래 데이터에 반영되지 않는 문제가 발생하는 경우가 있다.

원문 : 코코아 바인딩 문제해결(Troubleshooting Cocoa Bindings)
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/Troubleshooting.html

집합 컨트롤러가 현재 데이터를 표시하지 않아요.

“이러한 문제는 보통 여러분의 애플리케이션이 집합 콘텐츠를 키-밸류 옵저빙 호환 방식으로 데이터를 변경하지 않기 때문에 일어납니다. 배열을 addObject:removeObject: 로 제거하는 것만으로는 부족합니다.”

코코아바인딩에서 집합 타입의 프로퍼티를 연결할 때 유의할 점 더보기

핵공습 – Alphabet War

https://bit.ly/353Y8ML

알파벳소문자들과 대괄호([, ]), 샵기호(#)로 구성되는 문자열을 입력받아 생존하는 문자들을 리턴하는 프로그램을 작성한다.

규칙

인자로 문자열 battlefield가 주어진다. 이 문자열은 전장의 상황을 묘사하고 있다.

  • 문자열은 영어 소문자와 대괄호, 샵으로만 구성된다.
  • 각 문자열은 1명의 사람을 표현한다, 샵 문자는 핵폭탄을 표현한다.
  • 대괄호로 둘러싸인 부분은 방공호를 의미한다.

공습이 시작되면 모든 핵폭탄이 일제히 폭파한다. 누가 살아남을 수 있을까?

  • 핵폭탄이 폭발하는 경우, 방공호 외부의 인원은 모두 사망한다.
  • 방공호는 핵폭탄 1개의 위력만 견딜 수 있다. 인접한 지형에서 핵폭탄이 2개 이상 터지만 방공호 내부의 인원도 모두 사망한다.
  • “인접한”이란 방공호와 연결된 땅이다. 방공호는 그와 인접한 다른 방공호들 너머의 핵폭탄에는 영향을 받지 않는다고 가정한다.

예시

abc[def]ghj : abcdefghj (폭탄이 없으므로 모두 살아남는다)
a#c[def]ghj : def  (폭탄이 1개이므로 외부 인원은 모두 사망한다)
a#c[def]g#j[mno]pqr (_#_[def]_#_ 왼쪽 방공호는 좌우 하나씩, 총 2개의 폭탄으로 인해 파괴된다)
핵공습 – Alphabet War 더보기

[Python] 클래스 이해하기

클래스를 설명할 때 흔히 쓰는 표현은 ‘클래스는 거푸집에 해당하고 객체는 그 거푸집으로 찍어내는 벽돌에 해당한다.’는 것이다. 물론 완전히 틀린 설명은 아닌데, 이 개념에서 출발해서 클래스를 이해하는 것은 객체와 클래스의 관계와 클래스를 어떻게 다룰 것인지 등 여러 관점을 정립하는데 많은 어려움을 유발한다.

이 글은 파이썬 초보자들이 클래스에 대해 접근하고 이해하는데 도움을 주고자 작성됐다.

모든 것은 객체이다.

파이썬에서 통용되는 가장 중요한 대전제는 모든 것이 객체라는 것이다. 1, 2와 같은 숫자값도 C처럼 원시값이 아니라 int 타입의 객체이다. 함수 역시 객체이고 모듈이나 패키지도 객체처럼 취급된다. 모든 것이 객체라면, 클래스 그 자체도 객체라는 말이된다. 그럼 이 시점에서 다시 한 번 되물어보자. 도대체 객체란 무엇인가?

[Python] 클래스 이해하기 더보기

예제로 이해해보는 모나드 – 파서구현하기

Applicative Functor가 Functor를 확장하는 것처럼, 모나드도 Applicative의 차원을 확장한 것이라 할 수 있습니다. 하지만 그것은 단순한 기술적인 설명일 뿐이며 모나드에서는 그 모나드가 가지는 계산적 맥락이 어떤 특성을 갖는지를 이해하는 것이 중요합니다. (그리고 이것은 매우 추상적이라 쉽지 않습니다.)

이런 경우 구체적인 예를 들어가며 살펴보는 것이 좋은데, 모나드의 경우 흔히 파서(Parser)를 예로 듭니다. 파서란 어떤 해석기 같은것을 만들 때, 가장 앞단에 위치하는 부분으로 (주로) 문자열로 이루어진 데이터를 정해진 문법적 규칙(리터럴)에 맞게 토큰으로 분리하고, 각 토큰이 갖는 논리적 관계에 맞게 트리를 만들어내는 논리장치입니다. 어떠한 데이터, 특히 코드를 해석하는 모든 프로그램은 파서를 가지고 있습니다. 모든 언어의 컴파일러나 인터프리터는 기본적으로 해석기 이므로 파서가 필요합니다. 웹브라우저는 HTML 코드를 읽고 그 문법적 구조를 이해해야 하기 때문에 HTML 코드를 잘라내는 파서를 가지고 있습니다.

실질적으로 유용하고 의미있는 작업을 하는 파서를 만드는 것은 사실 매우 어렵고 복잡한 일입니다. 여기서는 단지 파서를 핑계로 모나드를 이해하는데 도움을 주려하기 때문에 아주 단순하면서도 쓸모없는 간단한 파서의 타입을 정의해보겠습니다.

예제로 이해해보는 모나드 – 파서구현하기 더보기