분류 전체보기380 objective c 프로토콜 1 objective c 프로토콜 1 이전 포스팅에서 알아본 카테고리와 가상 클래스, 가상 메소드는 한계가 있다. 즉, 카테고리와 가상 클래스는 선언되고 구현된 어떤 특정 클래스에만 영향을 미친다는 것이다. 카테고리는 특정한 클래스에 메소드를 추가하는 방법이고, 가상클래스는 objective c의 다형성을 이용하여 가상메소드로 전달된 명령을 각 서브클래스가 자신의 특성에 맞게 상세 명령으로 수행하는 방법이다. 위의 카테고리는 현재 클래스를 수평적으로 확장하는 역할을 하고, 가상함수는 현재 클래스를 수직적으로 확장하는 역할을 한다. 메소드 확장을 다중상속은? 메소드 확장을 통한 다중상속 개념을 구현하기 위해서는 서로 다른 클래스에 동일하게 적용할 수 있는 메소드 확장클래스 기법이 필요하다. 이를 위해 objc.. 2020. 12. 31. objective c 클래스 클러스터의 서브 클래스 objective c 클래스 클러스터의 서브 클래스 NSObject는 클래스 클러스터로 구성되지 않기 때문에 이것의 서브클래스를 만드는것은 전혀 문제가 없다. 그러나 기초 프레임워크에서 제공하는 NSObject 이외의 클래스의 서브클래스를 만드는 것에는 신중하여야 한다. 애플 문서에도 명시되어 있지 않은 클래스 클러스터가 숨어 있기 때문이다. 예를들면 NSString의 서브 클래스를 사용자가 만들경우 실제 동작하던 NSString의 메소드는 비공개 서브 클래스의 메소드이므로 서브클래싱이 형성되면서 기존의 메소드는 동작하지 않게 된다. 이 문제를 해결하려면 아래와 같은 몇가지 방버이 있다. 1. 서브클래스 대신 카테고리로 사용자가 원하는 메소드를 추가한다. 대신 인스턴스 변수 추가가 불가능하기 때문에 완전.. 2020. 12. 30. objective c 클래스 클러스터(추상클래스) objective c 클래스 클러스터(추상클래스) 추상(버추얼) 클래스란 추상메소드 (아직 정의되지 않고 선언만된 메소드)를 포함하고 있는 클래스를 뜻한다. 이 추상클래스의 개념은 아래 그림과 같이 UML에도 정의되어 있을 만큼 객체지향 언어에서 필수적인 요소지만, obj c 에서는 추상클래스 기능을 별도로 제공하지 않는다. 그러나 어떤 측면에서는 obj c의 모든 클래스는 잠재적으로 추상클래스 상태라고 볼 수 있다. 위의 추상 클래스를 obj c로 표현하면 아래와 같이 일반 클래스와 동일한 방법으로 작성한다. 다른 언어와 달리 virtual 또는 interface 같은 키워드는 존재 하지 않는다. 이런 이유로 alloc/init을 통해 geometry 클래스를 실제로 선언하는 것도 문제가 되지 않는다... 2020. 12. 29. objective c 카테고리 objective c 카테고리 카테고리는 본래 메소드를 기능별로 나누어 개발하기 위해 제공된 기능이다. 카테고리의 기능은 본래 분할 개발을 위해 나온 것이지만, 실제 환경에서는 이를 이용해서 기존 클래스에 추가 메소드를 정의할 수 있게 되었다. 메소드를 추가 정의하는 데는 클래스 메소드와 인스턴스 메소드 모두 가능하지만 추가로 멤버변수를 선언하는 것은 불가능하다. 카테고리는 특정 클래스에 종속적이기 때문에 처음 선언 부터 확장할 클래스의 이름과 괄호로 감싼 카테고리 이름을 적어주면 된다. 예제 1. 카테고리의 인터페이스는 자신이 속한 클래스의 인터페이스를 임포트한다. 2. 카테고리의 구현파일은 자기의 카테고리의 인터페이스를 임포트한다. 3. 카테고리에 포함된 메소드를 사용할 경우 카테고리 인터페이스를 임.. 2020. 12. 29. NSObject 2 이전 포스팅에서 세가지 새로운 변수 형식에 대해서 알아봤다. 1. 형식이 유동적인 인스턴스 객체 변수 2.형식이 고정적인 인스턴스 객체변수(클래스 이름). 예를들면 NSObject, NSString emd 3.클래스 객체를 지정할 수 있는 변수 Class @select(셀렉터) 이번에는 메소드 문법과 셀렉터 변수를 변수 형식으로 지정하여 동적프로그래밍을 구현하는 방법을 알아 본다. 셀렉터를 저장하기 위한 변수형은 SEL 형식이다. 이것은 @select(셀렉터) 형식으로 메소드를 변수로 지정할 수 있다. //변수형식 SEL로 변수 sel 선언 SEL sel; //인수가 없는 메소드 지정 sel = @selector(description); //인수가 없는 사용자 정의 메소드 지정 sel = @selecto.. 2020. 12. 28. NSObject 1 NSObject 프로토콜 제공 메소드 1.인스턴스 명세 @property (readonly, copy) NSString *description 수신자 인스턴스 명세를 NSString * 형식으로 반환해 준다. 기본적으로 현재 인스턴스의 클래스 이름과 함께 인스턴스의 포인터를 반환 한다. 반면 같은 이름의 클래스 메소드 +(NSString) description은 기본적으로 클래스 이름만 반환한다. 2.메시지 전송, 메시지 실행 지정한 메시지를 수신자에게 발송하고 결과를 반환한다. - (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSelector withObject:(id)object; - (id)performSelector:(SEL)aS.. 2020. 12. 28. objective c 소유권 objective c 소유권 objective c에서 메모리 관리 방법은? 1.MRC - 수동 메모리 참조 계수 2.ARC - 자동 메모리 참조 계수 리테인 카운터란? Retain Counter 란 소유계수라고도 한다. 대부분 인스턴스가 생성(alloc)될 때 1로 초기화 된다. 만일 해당 인스턴스를 다른 곳에서 공유(retain)하면 소유계수는 1만큼 증가된다. 반대로 더 이상 해당 인스턴스에 접근할 필요가 없을때는 이값은 1만큼 감소(release)된다. 최종적으로 계수가 0이되면 인스턴스는 시스템에 의해 제거된다. 예제1 아래 예제에서는 NSObject의 인스턴스를 alloc/init 으로 만들어서 obj 포인터에 할당한다. retain을 1회 release를 2회씩 호출한 결과이다. 마지막 rel.. 2020. 12. 27. objective c 동적결합 objective c 동적결합 아래 로직은 터미널에 입력된 숫자에 따라 변수 obj에 대입되는 객체 클래스가 달라진다. 클래스 A, B는 whoAreYou에 대응되지만, NSObejct는 대응못한다. objective c에서 어떤 객체가 그 메시지를 처리할수 있는지 없는지는 실제로 메시지를 보낼 때 정해진다. 모든 인스턴스는 자신이 어떤 클래스 인스턴스인지 알고 있으므로 메시지를 받았을 때 그에 따라 처리한다. 반대로 객체가 받은 메시지를 처리 못할때는 아래와 같이 실행 에러가 발생하고 종료된다. 이렇게 송신된 메시지에 대응해서 어떤 메서드가 실행될지가 실행 시에 결정되는 방식을 동적결합이라고 한다. #import #import @interface A : NSObject - (void)whoAreYou;.. 2020. 12. 26. objective c 상속과 클래스 objective c 상속과 클래스 상속이란? 다른 클래스 정의의 일부분을 확장 또는 변경해서 새로운 클래스를 정의하는 기능을 상속이라고 한다. 새롭게 작성한 클래스에서 상속의 기본이 되는 클래스를 슈퍼클래스라고 부르고, 반대로 상속받은ㅇ 클래스는 서브클래스라고 부른다. 상속의 특징은 무엇인가? 서브클래스는 슈퍼 클래스의 정의를 모두 이어 받는다. 서브 클래스는 슈퍼 클래스에 있던 인스턴스 변수도 이어받고 슈퍼 클래스와 같은 메서드를 실행할 수도 있다. 1. 새로운 메서드 추가하기 2. 새로운 인스턴스 변수 추가하기 3. 슈퍼 클래스 메서드를 다른 정의로 바꾸기 클래스 계층이란? 유용한 클래스를 상속해서 새로운 클래스를 더 만들거나, 상속으로 정의한 클래스를 다시 상속해서 다른 클래스를 만드는 작업을 반.. 2020. 12. 25. 이전 1 ··· 24 25 26 27 28 29 30 ··· 43 다음