์ฃผ์ ๊ธฐ๋ฅ
- Objective-C ๋ฐ Objective-C++ ์์ค ํ์ผ(`.m`, `.mm`)์ ํ ๋ฒ์ ํด๋ฆญ์ผ๋ก ํฌ๋งท
- LLVM์ clang-format์ ๊ธฐ๋ฐ์ผ๋ก ์์ธก ๊ฐ๋ฅํ ์ ๊ณ ํ์ค ํฌ๋งทํ ์ ๊ณต
- ์ฐ์ฐ์, ๋ฉ์๋ ์๊ทธ๋์ฒ, ๋ฉ์์ง ์ ์ก ์ฃผ๋ณ์ ๊ณต๋ฐฑ์ ์ ๊ทํ
- ์ธํฐํ์ด์ค, ๊ตฌํ์ฒด, ์ ์ด ํ๋ฆ์ ๋ํ ์ผ๊ด๋ ์ค๊ดํธ ์คํ์ผ ์ ์ฉ
- ๊ฐ๋ ์ฑ ๋์ ํค๋์ ์์ค๋ฅผ ์ํด ์ํฌํธ๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌ ๋ฐ ๊ทธ๋ฃนํ
- ๋ ๊ฑฐ์ Objective-C ํ๋ก์ ํธ, Swift/ObjC ํผํฉ ์ฑ, PR ์ ๋น ๋ฅธ ์ ๋ฆฌ์ ์ ํฉ
- UI ๋ฐ์์ฑ์ ์ ์งํ๊ธฐ ์ํ ํ์์์ ๋ฐ ํฌ๊ธฐ ์ ํ์ด ์๋ ์๋ฒ ๊ธฐ๋ฐ ์คํ
๐ ๏ธ Objective-C ์ฝ๋ ํฌ๋งทํ ๋ฐฉ๋ฒ for objectivec-formatter
1. ์ฝ๋ ๋ถ์ฌ๋ฃ๊ธฐ ๋๋ ์ ๋ก๋
Objective-C / Objective-C++ ์์ค๋ฅผ ํธ์ง๊ธฐ์ ๋ถ์ฌ๋ฃ๊ฑฐ๋ `.m` / `.mm` ํ์ผ์ ๋๋๊ทธ ์ค ๋๋กญํ์ธ์. ํค๋ ์ฝ๋ ์กฐ๊ฐ์ ๋ถ์ฌ๋ฃ์ด ๋น ๋ฅด๊ฒ ์ ๋ฆฌํ ์๋ ์์ต๋๋ค.
2. ํฌ๋งทํฐ ์คํ
**ํฌ๋งท** ๋ฒํผ์ ๋๋ฅด์ธ์. ์ฝ๋๋ ๋ณด์ ์๋ํฌ์ธํธ๋ก ์ ์ก๋์ด clang-format์ด Objective-C ์คํ์ผ ํ๋กํ๋ก ์คํ๋ฉ๋๋ค. ํฌ๋งท๋ ๊ฒฐ๊ณผ๊ฐ ๋ช ์ด ๋ด์ ๋ฐํ๋ฉ๋๋ค.
3. ๊ฒํ , ๋ณต์ฌ ๋ฐ ์ปค๋ฐ
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๊ฒํ ํ ํ Xcode๋ ํธ์ง๊ธฐ๋ก ๋ค์ ๋ณต์ฌํ์ธ์. ๊นจ๋ํ ํ์ผ์ ์ปค๋ฐํ์ฌ diff๊ฐ ๊ณต๋ฐฑ ๋์ ๋ก์ง์ ์ง์ค๋๋๋ก ์ ์งํ์ธ์.
๊ธฐ์ ์ฌ์
์ง์ ์ ๋ ฅ ํ์
์ผ์์ ์ธ Objective-C / Objective-C++ ๊ฐ๋ฐ์ ์ํด ์ ์๋์์ต๋๋ค.
| ์ ํ | ์์ | ์ฐธ๊ณ |
|---|---|---|
| .m ์์ค ํ์ผ | ๋ทฐ ์ปจํธ๋กค๋ฌ, ๋ชจ๋ธ, ๋งค๋์ | ์ ๋ก๋ ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ ์์ ์ง์. |
| .mm Objective-C++ ํ์ผ | C++๊ณผ Cocoa API ์ฐ๊ฒฐ | clang-format์ Objective-C++ ์ง์์ผ๋ก ํฌ๋งทํ ๋ฉ๋๋ค. |
| ํค๋ ์ฝ๋ ์กฐ๊ฐ | @interface ๋ธ๋ก, ํ๋กํ ์ฝ, ์นดํ ๊ณ ๋ฆฌ | ํค๋ ์ฝ๋๋ฅผ ํธ์ง๊ธฐ์ ์ง์ ๋ถ์ฌ๋ฃ์ด ์ ๋ฆฌํ์ธ์(ํ์ผ ์ ๋ก๋๋ `.m` / `.mm` ๊ธฐ๋). |
ํฌ๋งทํฐ ์์ง
ํฌ๋งทํฐ๋ ๋ณด์ ๋ฐฑ์๋์์ clang-format์ ์์ํฉ๋๋ค.
| ํญ๋ชฉ | ์ธ๋ถ์ฌํญ |
|---|---|
| ์์ง | LLVM clang-format (Objective-C / Objective-C++) |
| ์คํ ๋ชจ๋ธ | ์ ์ฉ `/api/objectivec-formatter` ์๋ํฌ์ธํธ๋ฅผ ํตํ ์๋ฒ ์ง์ |
| ํ์์์ | ์์ฒญ๋น ์ฝ 25์ด ์์ ํ์์์ |
| ์ฌํฌ๋งท ๋ฒ์ | ๊ณต๋ฐฑ, ๋ค์ฌ์ฐ๊ธฐ, ์ค๊ดํธ, ์ผ๋ถ ์ํฌํธ ๋ ์ด์์ |
| ์๋ฏธ๋ก | ์ฝ๋ ๋์์ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ๋ ์ด์์๋ง ์กฐ์ ๋ฉ๋๋ค |
์คํ์ผ & ๋ ์ด์์
์ฝ๋๋ ์์ ์ ์ธ clang-format ์คํ์ผ ํ๋กํ์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ๋ฉ๋๋ค.
| ๋ฒ์ฃผ | ์ ๊ทํ ๋์ | ์ค์์ฑ |
|---|---|---|
| ๋ฉ์๋ ์๊ทธ๋์ฒ | `-` ์ฃผ๋ณ ๊ณต๋ฐฑ, ๋ฐํ ํ์ , ๋งค๊ฐ๋ณ์ ๋ฐ ํฌ์ธํฐ | ํค๋์ ๊ตฌํ์์ ๋ฉ์๋ ์ ์ธ์ ์ฝ๊ฒ ์ค์บํ ์ ์๊ฒ ํฉ๋๋ค. |
| ๋ฉ์์ง ์ ์ก | ์ผํ ๋ค ๊ณต๋ฐฑ, ์ฝ๋ก ์ฃผ๋ณ, ์ค์ฒฉ ํธ์ถ ๋ด ๊ณต๋ฐฑ | ๊น๊ฒ ์ค์ฒฉ๋ `-[obj doSomething:withOption:]` ํธ์ถ์ ๊ฐ๋ ์ฑ์ ํฅ์์ํต๋๋ค. |
| ์ค๊ดํธ & ์ ์ด ํ๋ฆ | `@interface`, `@implementation`, `if`, `for`, `while`์ ๋ํ ์ค๊ดํธ ๋ฐฐ์น | ํ์ผ๊ณผ ๊ธฐ์ฌ์ ๊ฐ์ ์คํ์ผ ๋๋ฆฌํํธ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. |
| ์ํฌํธ | `#import` ๋ฐ `#include`์ ๋ํ ๊ทธ๋ฃนํ์ ๊ฐ๊ฒฉ | ํ์ผ ์๋จ ์น์ ์ ๊น๋ํ๊ฒ ์ ์งํ๊ณ ๋ณํฉ ์ถฉ๋์ ์ค์ ๋๋ค. |
| ๋ค์ฌ์ฐ๊ธฐ & ์ ๋ ฌ | ๋ธ๋ก, ์ค์์น, ์ค์ฒฉ ๋ฒ์์ ๋ํ ๊ท ์ผํ ๋ค์ฌ์ฐ๊ธฐ | ๋น ๋ฅธ ์๋ ํธ์ง์ผ๋ก ์ธํ ์ ๋ ฌ๋์ง ์์ ๋ธ๋ก์ ์ ๊ฑฐํฉ๋๋ค. |
์ ํ & ์ฑ๋ฅ
๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ง์ํค์ง ์๊ณ ์ค์ Objective-C ์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ถฐ ์กฐ์ ๋์์ต๋๋ค.
| ์ ๋ ฅ ์ ํ | ๋๋ต์ ์ ํ | ์ฐธ๊ณ ์ฌํญ |
|---|---|---|
| ๋ถ์ฌ๋ฃ์ ์์ค | ์ฝ 2MB ํ ์คํธ | ๋ฐฑ์๋๋ก ์ ์กํ๊ธฐ ์ ์ ์ ์ฉ๋๋ ํ๋ ์ ํ. |
| ์ ๋ก๋๋ ํ์ผ | ~5 MB | ๋๊ตฌ์ ๊ตฌ์ฑ๋ `maxFileSizeBytes`์ ์ํด ์ ํ๋ฉ๋๋ค. |
| ์ผ๋ฐ์ ์ธ ์ง์ฐ ์๊ฐ | < 1โ2์ด | ํ์ผ ํฌ๊ธฐ, ๋คํธ์ํฌ ์ง์ฐ ๋ฐ ์๋ฒ ๋ถํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. |
| ์คํจ ๋ชจ๋ | ์๊ฐ ์ด๊ณผ / ์ค๋ฅ ๋ฉ์์ง | UI๊ฐ ๋ฉ์ถ๋ ๋์ ์ค๋ฅ๊ฐ ๊น๋ํ๊ฒ ํ์๋ฉ๋๋ค. |
๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ชจ๋ธ
์๋ฒ ๊ธฐ๋ฐ, ํฌ๋งทํ ๋ง์ ์ํ ์์ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋๋ค.
| ์ธก๋ฉด | ๋์ |
|---|---|
| ์ ์ก | ์ฝ๋๋ HTTPS๋ฅผ ํตํด ๋ณด์๋ ํฌ๋งทํ ์๋ํฌ์ธํธ๋ก ์ ์ก๋ฉ๋๋ค. |
| ์ ์ฅ | ์์ ์ฒ๋ฆฌ ๋ชฉ์ : ์ ๋ ฅ์ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์ฒ๋ฆฌ๋๋ฉฐ ์ฅ๊ธฐ๊ฐ ์ ์ฅ๋์ง ์์ต๋๋ค. |
| ๋น๋ฐ ์ ๋ณด | API ํค, ํ ํฐ ๋๋ ํ๋ก๋์ ์๊ฒฉ ์ฆ๋ช ์ ์จ๋ผ์ธ ๋๊ตฌ์ ๋ถ์ฌ๋ฃ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. |
| ๋ชจ๋ฒ ์ฌ๋ก | ๋น๋ฏผ๊ฐ ํ์ผ๊ณผ ๋น ๋ฅธ ์ ๋ฆฌ์ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ , CI ๋ฐ ์ค์ํ ํฌ๋งทํ ์ ์์ฒด ์ธํ๋ผ ๋ด์์ ์ ์งํ์ธ์. |
Objective-C์ฉ ๋ช ๋ น์ค clang-format
์ผ์์ ์ธ ๊ฐ๋ฐ๊ณผ CI๋ฅผ ์ํด ๋ก์ปฌ ํด์ฒด์ธ์ clang-format์ Objective-C ์ฝ๋๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋๋ค.
macOS / ๐ง Linux
๋จ์ผ `.m` ํ์ผ์ ์ ์๋ฆฌ์์ ํฌ๋งท
clang-format -i MyViewController.m๊ตฌ์ฑ๋ ์คํ์ผ(์: `.clang-format`์์)์ ์ฌ์ฉํ์ฌ ๋์คํฌ์ ํ์ผ์ ๋ค์ ์๋๋ค.
ํ์ผ์ ๋ณ๊ฒฝํ์ง ์๊ณ ํฌ๋งท๋ ์ถ๋ ฅ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
clang-format MyViewController.mํฌ๋งท๋ ์ฝ๋๋ฅผ stdout์ผ๋ก ์ถ๋ ฅํ์ฌ ๋จผ์ diff๋ฅผ ๊ฒํ ํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ๋ด ๋ชจ๋ Objective-C ์์ค ํฌ๋งท
find . -name "*.m" -o -name "*.mm" | xargs clang-format -i์ ์ฒด Objective-C / Objective-C++ ์ฝ๋๋ฒ ์ด์ค์ ๊ฑธ์ณ ์ผ๊ด๋ ํฌ๋งทํ ์ ์ ์ฉํฉ๋๋ค.
Windows
ํค๋ ๋๋ ๊ตฌํ ํ์ผ ํฌ๋งท
clang-format.exe -i MyClass.h์ ํํ clang-format ์คํ์ผ๋ก ํค๋ ํ์ผ์ ์ ์๋ฆฌ์์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์คํฌ๋ฆฝํธ์ ์ผ๋ถ๋ก ์คํ
forfiles /S /M *.m /C "cmd /c clang-format.exe -i @file"์ ์ฅ์ ๋ด Objective-C ์์ค์ ๋ํ ๊ฐ๋จํ ๋ฐฐ์น ํฌ๋งทํ ์ ๋๋ค.
์ค์ฉ์ ์ธ ์ฌ์ฉ ์ฌ๋ก
iOS / macOS ์ฑ ๊ฐ๋ฐ
์ค๋๋ Objective-C ์ฑ์ ์๋ก์ด Swift ๋ชจ๋๊ณผ ํจ๊ป ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ฒ ์ ์งํ์ธ์.
- ์ฃผ์ ๋ฆฌํฉํ ๋ง ์ ์ ๋ ๊ฑฐ์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฆฌํ์ธ์.
- ์๋์ด์ ์ฃผ๋์ด Objective-C ๊ฐ๋ฐ์๋ก ๊ตฌ์ฑ๋ ํผํฉ ํ ์ ์ฒด์ ์ผ๊ด๋ ์คํ์ผ์ ์ ์ฉํ์ธ์.
- ์ปค๋ฐ ์ ์ ํฌ๋งทํ ์ ์คํํ์ฌ ํ ๋ฆฌํ์คํธ์์ ์ง์ ๋ถํ diff๋ฅผ ์ค์ด์ธ์.
@interface MyViewController : UIViewController
@property(nonatomic, strong) NSString *titleText;
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];NSLog(@"Loaded: %@",_titleText);}
@end
์ฝ๋ ๋ฆฌ๋ทฐ & ํ ๋ฆฌํ์คํธ ์ค๋น
๋ฆฌ๋ทฐ ๋ ผ์๋ฅผ ๋ ผ๋ฆฌ์ ์ง์ค์ํค๊ธฐ ์ํด ํฌ๋งทํ ์ ์ฌ์ ๋จ๊ณ๋ก ์ฌ์ฉํ์ธ์.
- PR์ ์ด๊ธฐ ์ ์ ๋ณ๊ฒฝ๋ ํ์ผ์ ํฌ๋งทํฐ๋ฅผ ์คํํ์ฌ ๊ณต๋ฐฑ ๋ ธ์ด์ฆ๋ฅผ ์ ๊ฑฐํ์ธ์.
- ์ค๊ดํธ ์คํ์ผ๊ณผ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์์ ํํ์ฌ diff๋ฅผ ๋ ์๊ณ ๊ฒํ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋์ธ์.
- ๋จ์ผ clang-format ํ๋กํ์ ์์ํ์ฌ ์คํ์ผ ๋ ผ์์ ์ค์ด์ธ์.
// ๋ฆฌ๋ทฐ ์ : ์ผ๊ด์ฑ ์๋ ๊ฐ๊ฒฉ
if(showAlert){[self showAlertWithMessage:message];}
// ํฌ๋งทํ
ํ
if (showAlert) {
[self showAlertWithMessage:message];
}
โ Frequently Asked Questions
๐ ๏ธ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ํฌ๋งทํฐ ์์ง์ด ์ฌ์ฉ๋๋์?
๐์ด๋ค ํ์ผ ์ ํ์ด ์ง์๋๋์?
๐UI์์ ๋ค์ฌ์ฐ๊ธฐ๋ ์ต๋ ์ค ๋๋น๋ฅผ ์ ์ดํ ์ ์๋์?
๐๋ด ์์ค ์ฝ๋๊ฐ ์ ์ฅ๋๊ฑฐ๋ ๊ธฐ๋ก๋๋์?
HTTPS๋ฅผ ํตํด ๋ณด์ ํฌ๋งทํ
์๋ํฌ์ธํธ๋ก ์ ์ก๋๊ณ ์ผ์์ ์ธ ์
๋ ฅ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ฅ๊ธฐ ์ ์ฅ์ ๋ชฉ์ ์ผ๋ก ํ์ง ์์ต๋๋ค. ๊ทธ๋๋ ๋ชจ๋ฒ ์ฌ๋ก๋ก์ ๋ชจ๋ ์จ๋ผ์ธ ๋๊ตฌ์ ๋น๋ฐ, ์๊ฒฉ ์ฆ๋ช
๋๋ ๋งค์ฐ ๋ฏผ๊ฐํ ๋น์ฆ๋์ค ๋
ผ๋ฆฌ๋ฅผ ํฌํจํ์ง ๋ง์ธ์.โ ๏ธํฌ๋งทํ ์ด ๋ด ์ฝ๋์ ๋์์ ๋ณ๊ฒฝํ ์ ์๋์?
๐์ด ์น ๋๊ตฌ์ ๋ก์ปฌ clang-format ์ค ์ธ์ ์ฌ์ฉํด์ผ ํ๋์?
Pro Tips
์ปค๋ฐ ์ ์ ํฌ๋งคํฐ๋ฅผ ์คํํ์ฌ ํ ๋ฆฌํ์คํธ diff๊ฐ ์ค๊ดํธ ๋ฐฐ์น ๋์ ๋์์ ์ง์ค๋๋๋ก ์ ์งํ์ธ์.
CI(๋๋ pre-commit ํ )์ `clang-format` ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ฌ ์คํ์ผ ๋ฌธ์ ๊ฐ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋๋ฌํ์ง ์๋๋ก ํ์ธ์.
์ํฌํธ๋ฅผ ์ ๋ ฌํ๊ณ ๊ทธ๋ฃนํํ์ฌ ์ ์งํ์ธ์. ์ฌ๋ฌ ํ์์ด ๋์ผํ ํ์ผ์ ์์ ํ ๋ ๋ณํฉ ์ถฉ๋์ ์ค์ฌ์ค๋๋ค.
ํ๋ก๋์ ๋น๋ฐ๋ฒํธ๋ ํ ํฐ์ ์ด๋ค ์จ๋ผ์ธ ํฌ๋งคํฐ์๋ ๋ถ์ฌ๋ฃ์ง ๋ง์ธ์. ๋ฏผ๊ฐํ ์ฝ๋์ ๊ฒฝ์ฐ ์์ฒด ์ธํ๋ผ ๋ด์์ ๋ก์ปฌ๋ก clang-format์ ์คํํ์ธ์.
Additional Resources
Other Tools
- CSS ์ ๋ฆฌ ๋๊ตฌ
- HTML ์ ๋ฆฌ ๋๊ตฌ
- ์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฆฌ ๋๊ตฌ
- PHP ์ ๋ฆฌ ๋๊ตฌ
- ์์ ์ ํ๊ธฐ
- ์คํ๋ผ์ดํธ ์ถ์ถ๊ธฐ
- Base64 ๋์ฝ๋
- Base64 ์ธ์ฝ๋
- C# ํฌ๋งทํฐ
- CSV ํฌ๋งทํฐ
- Dockerfile Formatter
- Elm ํฌ๋งทํฐ
- ENV ํฌ๋งทํฐ
- Go ํฌ๋งทํฐ
- GraphQL ํฌ๋งทํฐ
- HCL ํฌ๋งทํฐ
- INI ํฌ๋งทํฐ
- JSON ํฌ๋งทํฐ
- LaTeX ํฌ๋งทํฐ
- ๋งํฌ๋ค์ด ํฌ๋งทํฐ
- Php Formatter
- ํ๋กํ ์ฝ ๋ฒํผ ํฌ๋งทํฐ
- Python ํฌ๋งทํฐ
- Ruby ํฌ๋งทํฐ
- Rust ํฌ๋งทํฐ
- Scala ํฌ๋งทํฐ
- ์ ธ ์คํฌ๋ฆฝํธ ํฌ๋งทํฐ
- SQL ํฌ๋งทํฐ
- SVG ํฌ๋งทํฐ
- Swift ํฌ๋งทํฐ
- TOML ํฌ๋งทํฐ
- Typescript Formatter
- XML ํฌ๋งทํฐ
- YAML ํฌ๋งทํฐ
- Yarn ํฌ๋งทํฐ
- CSS ์์ถ๊ธฐ
- Html Minifier
- Javascript Minifier
- JSON ์์ถ๊ธฐ
- XML ์ต์ํ ๋๊ตฌ
- HTTP ํค๋ ๋ทฐ์ด
- PDF ํ ์คํธ ๋ณํ
- ์ ๊ท์ ํ ์คํฐ
- ๊ฒ์ ์์ ํ์ธ๊ธฐ
- Whois ์กฐํ