Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩

iOS Developer/Objective-C21

22. Objective-C 메모리 관리 MMR, ARC 앱 개발을 하다보면 메모리 누수 메모리 누수 하는 얘기를 들어봤을 것이다.예전에 비하면 스마트폰의 성능과 램 용량이 넉넉해져서 좀 덜하지만.. 그래도 앱의 성능을 위해서는 메모리 관리의 개념을 알고 있는 것은 굉장히 중요하다.MRR (Manual Retain-Release)최근 많은 언어들이 메모리 관리의 많은 부분을 자동으로 해주지만, Objective C와 같은 C계열 언어는 메모리 관리를 직접 해줘야 했다. 필요한 경우에 메모리에 객체를 올리고, 객체가 더 이상 필요 없어지면 메모리에서 직접 해제해 주는 것이다.깜빡하거나 실수로 필요없는 객체를 메모리에서 해제하지 않으면 쓸데없이 메모리를 잡아먹고 있는 녀석들이 많아지는데 이걸 메모리 누수라고 한다. MRR은 이름 그대로 수동으로 메모리 할당 및 해.. 2024. 5. 23.
21. Objective-C Protocol 프로토콜 [프로토콜] 프로토콜은 '이러한 메서드를 구현해야 해!'라는 제약사항이라고 설명할 수 있다. Objective-C에서 상속은 단일 상속만 지원하는 반면, 프로토콜은 다중 채택이 가능하다.또한 프로토콜을 통해 객체를 참조할 수도 있기 때문에 다형성 구현에도 매우 유용하다.즉 클래스 단위에 의존하는 대신, 프로토콜에 의존하도록 객체 간 결합도를 낮출 수 있다는 것이다.프로토콜 문법@protocol 프로토콜이름@required//반드시 구현해야 하는 메서드@optional//구현이 선택인 메서드@end 프로토콜 채택(준수)@interface MyClass: NSObject ...@end채택(adopting), 준수(conforming)의 미묘한 차이가 있지만둘 다 클래스가 프로토콜이 정의한 요구 사항을 충족한.. 2024. 5. 22.
20. Objective-C Category, Posing, Extension [Category, Posing, Extension] 이번에는 클래스를 확장할 수 있는 기능들에 대해서 알아보자.Category기본 클래스에 나만의 기능을 추가하는 등특정 상황에서 이미 존재하는 클래스에 기능을 추가하고 싶은 경우에  Category를 사용할 수 있다.(변수는 추가할 수 없다.)@interface 클래스명 (카테고리명)//method declare@end 카테고리는 원본 클래스를 수정하지 않고, 어떤 클래스에서든 선언할 수 있다.카테고리에서 선언한 메서드는 원본 클래스의 모든 인스턴스에서 호출 가능하다.(자식 클래스 포함)런타임에서 카테고리를 통해 추가된 메서드와 원본 클래스에서 구현된 메서드는 동일한 방식으로 동작한다.(다만 이름이 동일할 경우 메서드끼리 덮어씌워지는 등 충돌할 수 있어.. 2024. 5. 22.
19. Objective-C 다형성(polymorphism) [다형성, 오버라이딩, 업캐스팅, 다운캐스팅] 다형성은 말 그대로 형태가 다양하다는 것이다. 프로그래밍에서 다형성은 주로 클래스간의 상속관계가 있을 때 나타난다. 메서드 오버라이딩(Method overriding)같은 이름의 메서드라도 어떤 타입으로 참조하고 있는지에 따라 내부 동작이 달라진다.좀 더 정확히는 서브클래스에서 슈퍼클래스의 메서드를 재정의 하는 것을 말한다.즉 어떤 객체를 부모타입으로 참조하느냐? 본인 타입으로 참조하느냐에 따라 호출되는 메서드가 다른 것이다. 메서드 디스패치 테이블(Method Dispatch Table)옵젝씨에서 메서드는 메서드 디스패치 테이블을 통해 관리된다.(내부적으로는 클래스의 메타 데이터 등이 저장되는 구조체로 되어 있다.)메서드는 런타임에 메서드 호출을 처리하는 .. 2024. 5. 22.
18. Objective-C Inheritance 상속, encapsulation(캡슐화) [상속, 캡슐화, 깊은복사] 객체지향 프로그래밍에서 상속은 굉장히 중요하다. 코드의 재사용성 및 확장성 증대 & 개발 속도에서 효율을 끌어올릴 수 있으며 다형성 구현에도 필요하기 때문이다. 새로운 클래스가 필요할 때, 모든 데이터 및 멤버 메서드를 다시 정의하는 대신, 기존에 만들어둔 다른 클래스의 멤버를 상속받게 할 수 있다.이 경우 기존 클래스는 부모 클래스(Super Class), 부모 클래스를 상속받아 만들어진 클래스는 자식 클래스(Sub Class) 라고 말한다. OBC에서는 단일 상속만 지원한다. 즉 단 하나의 부모 클래스만 가진다는 것이다.(Java,Swift와 마찬가지)이는 다이아몬드 문제(어느 클래스에서 상속받은 건지 모호한 문제)를 피하고 복잡한 상속 구조 대신코드의 단순성과 명료성을 .. 2024. 5. 21.
17. Objective-C 클래스와 객체 (메모리), 접근제어 [@property, 스레드 안전, 접근제어] Objective-C는 이름만 봐도 알 수 있듯이 C언어에서 객체지향의 개념을 더한 슈퍼셋 언어이다.객체지향 프로그래밍에서 클래스는 핵심 기능인데 클래스는 객체를 찍어내기 위한 틀 혹은,데이터와 데이터를 조작하는 메서드를 하나로 묶은 것으로 설명할 수 있다. 클래스와 객체클래스는 객체를 찍어내기 위한 템플릿, 설계도이다.객체는 일반적으로 클래스의 인스턴스를 말한다.(클래스를 바탕으로 실제로 메모리에 만들어진 것)인스턴스는 특정 클래스에서 생성된 객체를 의미한다.(어떤 클래스에서 만들어진 것인지가 중요할 때 사용) 객체와 인스턴스를 엄밀히 구분하는 것은 어렵고, 객체는 클래스에서 생성된 모든 것,인스턴스는 특정 클래스에서 생성된 것을 강조하기 위해 사용하는 용.. 2024. 5. 20.