일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 데이터베이스 공부
- apple developer academy 후기
- 애플 아카데미 후기
- 제앱소
- iOS 개발 오류
- OS
- swift문법
- 네이버 치지직
- 운영체제
- 숭실대
- 애플 디벨로퍼 아카데미 21주차 회고
- SWIFT
- 네이버 부스트캠프
- 데이터베이스
- useReducer
- Swift 문법
- 애플 디벨로퍼 아카데미
- Swift 디자인패턴
- ObservableObject
- StateObject
- ObservedObject
- Swift 기능
- react
- Apple Developer Academy @ POSTECH
- global soop
- 앱 비교 프로젝트
- sqoop
- 치지직
- 소프트웨어분석및설계
- 애플 디벨로퍼 아카데미 후기
- Today
- Total
사과하는 제라스
[iOS 주변 기능] Xcode 16에서 Group이 아닌 Folder가 기본인 이유 본문
[iOS 주변 기능] Xcode 16에서 Group이 아닌 Folder가 기본인 이유
Xerath(제라스) 2024. 9. 24. 04:49목차
서론
안녕하세요! 개발자 제라스입니다~! 👋🏻 🤖 👋🏻
오늘은 Xcode 16과 관련된 새로운 업데이트 사항에 대한 포스팅을 들고왔습니다!
여러분은 macOS Sequoia로 버젼을 올리셨나요??
아니 벌써 올린다고??
아니 아직도 안 올린다고???
등등
제 주변 분들 중에서도 지금 올리는게 맞녜아니녜 얘기가 많은데
저는 새로운 건 바로 써보고 싶어서 바로 올렸습니다 흐흫흫
특히, 아이폰 미러링은...
진짜 대박적인 거 같아서 너무 써보고 싶었거든요 ㅎㅎ
그러고서 최근 들어 사이드 프로젝트 개발을 하는데...
당황스러운 상황이 발생...!
일단, 저는 새로운 파일이나 Folder를 만들 때,
cmd+N과 cmd+opt+N 단축키를 쓰거든요??
그렇게 하면 새로운 파일이랑 Group(회색 폴더 모양)이 생기거든요.
근데...!
세콰이어 업데이트 때문에 Xcode16으로 올린 이후부터는
Folder(하늘색 폴더 모양)가 생기더라구요!!
이렇게 Xcode 16 전후로 기본 생성되는 프로젝트 형태도 다릅니다...!!
그래서 오늘은 Group과 Folder의 차이와 장단점와
그 사용 기준에 대해 가볍게 얘기해보겠습니다~~!
Group과 Folder. 둘의 차이는?
먼저, 얘네가 무엇인지에 대해서부터 얘기해볼게요!
그룹 : 디스크에 따로 물리적인 폴더 생성 없이 Xcode 프로젝트 파일 내에서 파일을 그룹화하는 역할.
뭔소리여???
일단 얘는 일단 Xcode의 side bar에서
요런 모양으로 나타나는 친구들인데요!
예를 들면, 우리가 Xcode에서 여러 Swift 파일들을 하나로 묶어주고 싶을 때가 있잖아요?
그런 역할을 해주는게 Group입니다. 근데 따로 물리적으로 폴더를 만들진 않고 참조를 하는 형태인거죠.
참조???
즉, Xcode에서 보이는 건 추상적인 UI일 뿐 실제로 파일 시스템과 동일한 건 아니에요.
그래서 우리가 Group으로 만들어서 개발을 하면,
분명 파일 시스템에는 있는데, Xcode에는 없는 상태가 가능하죠.
이렇게 다른 이유는 'Group'이란 애는 그저 현재 프로젝트 폴더에 있는 것들을 참조를 할 뿐이기 때문이에요!
비유를 하자면...
우리가 초등학생 때, 반에서 분단을 나누잖아요?? 그건 Folder!
하지만 잠시 현장학습을 갈 때 잠시 조를 나누는 것은 Group!
즉, 'Xcode 상에서의 모음일 뿐 실제 파일 시스템이 그대로인 것은 아니다'
이렇게 이해하시면 됩니다!
그리고 1:1 대응 면에서 얘기를 해보자면,
Xcode에서 Group으로 묶으면 -> 파일 시스템에도 동일하게 생성
파일 시스템에서 새로운 폴더를 만들면 -> Xcode에서는 아무것도 안 나타남
예를 들면,
여기서 Source 내부에 Hi란 이름으로 Group을 만들면
다음과 같이 파일 시스템에도 동일하게 폴더가 생겨요.
즉, Xcode에서 새로 Group을 만든다는 것은 결국 어떤 새로운 파일시스템의 폴더를 참조해야 하는데
파일 시스템에 없으니까 당연히 자동으로 파일 시스템에도 새로 생성이 되는거죠!
그럼 반대로도,
이렇게 파일 시스템에 'I'm From File System'이란 폴더를 만들어도 Xcode에서는 보이지 않습니다.
왜냐하면 Source라는 것은 참조일 뿐 파일 시스템을 1:1로 계속 구독하는 아이는 아니기에
변화를 Xcode에 반영할 이유가 전혀 없기 때문입니다.
즉, 실제 파일 시스템에는 만들어지지만 Xcode에서는 안 쓰는.
그런 모습인 겁니다.
그럼 이제 Folder를 보겠습니다!
Folder는 실제 디스크에 물리적인 폴더를 생성하고, 해당 폴더 내의 파일들을 모두 프로젝트에 반영하는 역할.
요렇게 하늘색 모양이구요~~
얘는 진짜 간단하게 우리가 늘 상 쓰는 폴더랑 같아요.
사실 다른 플랫폼 개발하시는 분들이라면 이게 너무 익숙+당연할 겁니다!!
저도 이전에 2년 간 React native 개발을 했었기 때문에
VSC에서는 이런 방식으로 폴더를 생성하면 파일 시스템에 있는거랑 1:1대응이 당연히 되는 것이 익숙했거든요...!!
그래서 처음에 iOS를 시작했을 때,
파일 시스템엔 있는데
Xcode엔 안 뜨는 걸 보고는 흐에에에엑 어디갔어!!!!!! 이랬던 ㅋㅋㅋㅋㅋ
얘는 따로 설명을 안해도 될 정도로,
Xcode에서 생성하면 -> 파일 시스템에도 생성되고,
파일 시스템에서 생성하면 -> Xcode에서도 생성이 되는
그런 역할의 모음입니다.
그럼 이런 개념 외에도 얘기를 더 해보자면...
Folder 안에는 그룹이 만들어질 수 없다
말 그대로입니다!
우리가 Folder를 만들면 그 안에 Group을 만들 수가 없어요.
그 이유를 잘 생각해보면,
Folder 안에 뭔가를 만든다는 것은 파일 시스템에 있는 폴더 형태를 그대로 가져오겠다는 거잖아요?
즉, 1:1 대응을 한다는 거죠.
근데, 만약 내가 그 안에 참조를 안하는 Group을 만든다??
극단적인 비유를 하자면...ㅋㅋㅋ
엄마가 완전 인싸에요.
그래서 엄마가 하는 모든 것들을 다른 사람들이 다 알죠.
근데, 되게 내성적인 아들을 낳았어요.
아들은 자기가 알려지는 걸 좋아하지 않아요.
근데 그렇다고 엄마가 아들을 낳은 걸 다른 사람들이 모를까요??
무조건 안다는 거죠. 엄마는 인싸니까~~ㅋㅋㅋㅋㅋㅋㅋ
다시 돌아와서.
어차피 Folder로 만들면 모든게 1:1 대응이 될 거에요.
그렇기에 그 안에 아무리 Group을 만든다 한들 1:1 대응이 되어야 하는 거죠.
그래서 Folder 안에는 Group을 만들 수 없도록 Xcode는 설계가 되어 있습니다.
Group과 Folder의 장단점
Group과 Folder의 장단점은 서로에겐 단장점입니다!
일단, Group은 참조 형태이고, 파일 시스템을 그대로 들고 오질 않기 때문에
Group들의 나열 순서, 그 내부의 파일들의 나열 순서를 커스텀할 수 있다.
예를 들면, 이 View Group과 같이 내부에 있는 애들이 알파벳 순으로 정렬이 고정되지 않아요.
그래서 원하는대로 순서를 두어서 프로젝트 내에서 파일, 폴더의 배치에 대한 가독성을 높여줄 수 있습니다.
즉, 조금 더 프로젝트를 직관적이고, 깔끔하게 정리할 수도 있고, 원하는대로 유연하게 파일 위치를 두고 참조를 할 수 있기 때문에 가독성이 높아집니다.
반대로, Folder의 경우엔 파일 시스템이건, Xcode에서건 파일이나 폴더의 순서가 사전식 순서로 정렬됩니다.
이러한 점에서는 가독성 면에서 떨어진다고 볼 수 있죠.
Folder의 장점으로는 파일 시스템과의 동기화 효과가 있습니다.
파일 시스템을 그대로 동기화해서 따른다는 점에서 명확한 형태의 구조를 보여주고,
자동으로 파일 시스템의 파일들을 1:1로 참조하고 있기 때문에 파일 시스템엔 있고, Xcode엔 없는 형태를 방지해주면서,
xcodeproj의 번들로 있는 project.pbxproj라는 애가 더 이상 바뀌지 않고, 그로 인한 협업 시 충돌들도 방지를 할 수 있습니다.
즉, 간단히 비유를 하자면
고등학교 내신 수학 시험을 보는데 시험 범위를 '수1 전체' 라고만 하면 이것저것 문제들을 다 풀어봐야 하는데
'수1 교과서 168pg~250pg 내 C레벨 문제들 중 20개 골라서 냄'이라고 하면, 딱 교과서만 보면 되잖아요?
이것처럼 이 프로젝트를 함께 협업하는 사람들끼리 모든 파일 시스템 구조도 똑같고, 그것들을 참조하는 프로젝트의 모양도 똑같기에,
같은 파일에 대해 다른 참조 번호를 갖는 형태로 인한 충돌 같은게 발생하지 않습니다.
이건 제가 Group들로 만들어진 프로젝트를 모두 Folder로 변형했을 때
PBXBuildfile section의 대부분이 제거되는 모습입니다.
이렇게 하다보니 project.pbxproj 파일이 엄청 단순해지더라구요ㅎㅎ
기존의 Group 구성 Project를 Folder로 바꾸는 방법
이건 이전에도 있었는지 모르겠는데,
이렇게 어떤 Group에 대해서 우클릭을 하면 Convert to Folder가 뜹니다.
이걸 누르면 그 Folder는 물론이고 내부에 있는 Group들도 모두 Folder로 바뀝니다.
이건 앞서 말했던 Folder 내에는 Group이 없다의 이유와 같습니다~!!
근데 막상 적용하려면, 다음과 같이
Could not convert “Project” to a folder.
The folders on disk and groups in Xcode must match exactly to convert a group to a folder.
라고 뜨는 경우가 있을 텐데, 이건 Show Details를 들어가보면
요렇게 뜹니다!
이걸 참고해서 어떤 폴더가 지금 현재 프로젝트에 Group으로 혹은 Folder로 안나와 있는지 확인해보면 됩니다.
그러고 추가를 해준 뒤 다시 Convert 하면 좌르륵 바뀝니다 ㅎㅎㅎ
왜 Apple은 Default 생성을 Group에서 Folder로 바꾸었을까?
제가 가장 생각했던 핵심입니다.
일단 프로젝트를 새로 만들든, 그 안에 cmd+opt+N을 하든 모두 Folder를 기본으로 생성해주게 바뀌었는데...
왜 내내 Group으로 만들어주던 걸 바꾼걸까???
이 이유를 알고자 들어오셨다면 실망하실 텐데요 ㅠㅠ
사실 직접적인 이유는 들 수가 없습니다.
다만, 예측을 해보자면 늘 그랬듯 앞으로 Apple이 만들어나갈 것들을 위한 변경이라고 생각을 합니다.
iOS로 만드는 모든 프로젝트들의 제일 기본 구조를 Group에서 Folder로 바뀌었다고 생각하면,
사실상 이건 엄청 큰 변화라고 생각합니다.
누구든 간에 무조건 처음에 만들어지는게 Group이 아니라 Folder일 테니까요.
이런 변화의 이유로는 앞서 얘기했던 협업에서의 충돌 문제에도 있을 것 같아요!
각 개인들에게 유연성을 부여해서 구조를 만들 때 편리함을 줄 수 있었던 Group과 달리,
이런 점이 불편해도 협업에서 충돌이 덜 날 수 있는 Folder의 방식, 그리고 자동 동기화로 인해 직관적인 관리가 가능한 Folder.
그 중 Apple은 고수해오던 Group 방식보다 Folder로 구현 시에 생기는 부가적인 장점들, 그리고 앞으로 나올 것들과의 최적화 면에서 Folder를 Default로 선택하지 않았나 싶습니다.
혹시나 이러한 변화의 이유를 아시는 분이 계시다면 댓글로 말씀주세요 ㅠㅠㅠ
마무리
Group과 Folder.
사실 이 차이를 제대로 인지를 못하고 있었는데 이번 기회로 잘 알고 갈 수 있었던 것 같아요..!
혹시나 제가 부족한 점이 있다면 ㅠㅠㅠㅠㅠㅠㅠ 꼭 댓글로 말씀 부탁드립니다...!!
앞으로 Folder를 활용한 방식으로 개발을 많이 해나갈 텐데
그 과정에서 협업 충돌이 줄어드는지를 중점으로 한번 차이를 느껴봐야겠습니다!
그럼 오늘도 끝까지 포스팅 읽어주셔서 감사합니다!
참고
https://developer.apple.com/documentation/updates/xcode#Projects-and-workspaces
https://troz.net/post/2024/xcode_folders_groups/
https://infinitt.tistory.com/414
https://forums.developer.apple.com/forums/thread/759620
아직 꼬꼬마 개발자입니다.
더 나은 설명이나 코드가 있다면 언제든 환영입니다.
적극적인 조언과 피드백 부탁드립니다!
그럼 오늘도 개발 가득한 하루되세요!
- Xerath -
🤖🤖🤖🤖🤖🤖🤖
'제라스의 iOS 공부 > iOS 주변 기능' 카테고리의 다른 글
[iOS 주변 기능] JSON Lottie 대신 dotLottie를 써야 하는 이유 (2) | 2024.07.29 |
---|