궁금중
delegate의 사전적 의미는 A person sent or authorized to represent others.
다른 사람을 대표하는 사람인만큼 일종의 대리 권한자를 뜻한다.
하지만 코드에 delegate 역할이 왜 필요할까?
모 사이트에서는 아래와 같이 설명한다.
"As the name implies, delegation gives control to other objects... delegation patterns enable objects to communicate back to their owners decoupled from their code. It's much easier to reuse and maintain code if an object does not have to know the concrete type of its owner. [링크]
delegate는 특정 코드의 객체로 분리된(이게 어떤 의미일까?) 코드에게 데이터를 전달하는 역할을 한다. 예시로 push notification이나 URL 또는 앱 실행 단계를 언급했지만, 완벽하게 이해가 되지는 않는다.
정확했다!
UIImage는 이미지를 담는 데이터 객체
UIImageView는 UIImage 데이터를 표시하는 컨트롤 역할
우리가 위치를 특별히 지정하지 않고 넓이, 높이만 지정했을 경우,
생성된 UIComponent는 아이폰 좌측 최상단 구석에 놓여 있을 가능성이 크다.
이유는 (0,0)의 기준이 좌측 최상단이기 때문인데,
이를 바꾸기 위해선 x,y 값이 필요하다.
x와 y 좌표로 스크린에서 위치를 잡고, height와 width의 규격을 만들어야 원하는 UIComponent가 알맞는 위치를 기점으로 크기를 보여줄 수 있을 것이다.이 모든 과정에서 사용되는 키워드가 CGPoint, CGSize, CGRect이다.
1. CGPoint는 공식문서에 따르면 two-dimensional coordinate system이라고 한다. 즉, x와 y를 통해 좌표에 점의 위치를 잡는 코드이다.
2. CGSize는 width and height value를 가진 구조체를 의미한다. 즉, 말 그대로 높이, 넓이가 필요하면 사용되는 규격을 의미하는데, CGRect와 가장 큰 차이점은 '사각형이냐 아니냐의 차이다.' [링크]
CGSize는 말그대로 높이와 넓이를 의미할 뿐, 사각형을 의미하지 않는다.
3. CGRect은 조금 특별하게 사각형의 위치와 크기 둘 다 포함한 구조체다.
공식문서에서도 the location and dimensions of a rectangle이라 표현하는데, 생성자들을 보면, 단순히 x, y, width, height 뿐만 아니라 (origin , size)를 포함하고 있다.
이 말은 CGRect는 위에 정리된 CGPoint와 CGSize를 모두 포함하기에
origin은 CGPoint의 x와 y 좌표. Size는 width와 height를 대체하는 표현이라 이해할 수 있다!!
🚨 한 줄 정리: 🚨
parameter의 타입만 다를 뿐, 다 직사각형을 생성하는 생성자이다~
[링크2], [링크3]
추가 정리를 하면, Swift가 개발-friendly한 언어로 포지셔닝하고자 한만큼,
이전부터 존재한 복잡한 규격들을 처음 접하는 분들도 이해할 수 있도록 CGRect, CGPoint, CGSize를 사용한다는 의견도 있다.
- 규격을 위해 사용하는 코드인 것은 알겠다. 하지만 왜 다른 요소(size 같은)가 아닌 CGRect를 하는지, CGPoint와의 차이점도 궁금하다.
Stated Above