개발자

TS interface prefix에 I 붙이는 거 어떻게 생각하시나요?

2023년 08월 29일조회 731

TS에서 인터페이스에 대문자I 를 접두사로 붙이는 점에 대해 어떻게 생각하시는지 궁금합니다! 다들 이름 어떻게 지으시나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 4

인기 답변

강서지님의 프로필 사진

저는 인터페이스 변수명을 지을 때 I prefix를 붙이지 않고 있습니다. 제가 처음 타입스크립트를 공부하기 시작했을 때부터 이미 그런 기조가 없어지고 있었던 것 같기도 합니다. 이유는 여러 가지가 있더라고요. 전체적인 맥락에서 네이밍 컨벤션을 해친다든지, 캡슐화 원칙에 위배가 된다든지요. 컨벤션을 결정하는 데에는 이유가 중요한 것 같습니다. 잘 상상은 가지 않지만 어떤 환경에서는 꼭 접두사가 있어야만 하는 이유가 있을 수도 있죠. 물론 현 상황에서는 대부분 그렇지는 않은 것 같아요. 애초에 거슬러 올라가 보면 접두사를 붙이게 된 이유가 네이밍을 통해 타입을 추론할 수 있도록 하는 것이라고 하는데, 요즘은 워낙 IDE나 에디터가 잘 되어 있어서 마우스만 올려도 쉽게 알 수 있으니까요. 결국 전체 네이밍 컨벤션을 유지하려고 한다는 전제 하에서 현재 내가 진행 중인 프로젝트에서 I prefix를 쓰고 있다면, 정말로 써야 하는지, 그것을 씀으로써 어떤 이득을 갖게 되는지 한 번쯤은 고민을 해 볼 필요가 있는 것 같습니다. 저라면 prefix를 붙이는 것에 대한 이점을 아직까지는 크게 느끼지는 못했기에 사용하지 않는 쪽을 선택할 것 같아요!

인기 답변

김하림님의 프로필 사진

저희 팀은 타입에 헝가리안 표기법 사용하지 않기로 합의했습니다. 헝가리안 표기법을 사용하지 않기로 한 이유는 헝가리안 표기법이 더 이상 필요하지 않다고 판단했기 때문입니다. 헝가리안 표기법의 최대 장점은 prefix를 통해 타입을 쉽게 파악할 수 있다는 점입니다. 예전에는 IDE들이 마우스를 올린다고 해서 어떤 타입인지 알려줄만큼 똑똑하지 않았기 때문에, 변수에 prefix를 붙이는 컨벤션이 개발자들에게 큰 도움이 되곤 했습니다. 다만 이는 예전의 이야기이고, 현재는 타입이 궁금하면 마우스를 올리면 됩니다. 똑똑한 IDE들은 마우스를 올리면 어떤 타입인지 뿐만 아니라, 인터페이스 내부 속성들도 보여주기 때문에 오히려 더 많은 정보를 얻을 수 있다는 장점도 존재합니다. 추가적으로, 저희는 팀 ESLint 공유 컨피그에서 @typescript-eslint/naming-convention 규칙을 사용해 헝가리안 표기법 사용 시 경고를 표시하도록 설정해놓았습니다. 팀에서 합의한 내용들을 ESLint 규칙으로 지정해놓으면 일일이 문서를 참고할 필요 없이 합의된 컨벤션을 ESLint가 알려주기 때문에 편리합니다. (첨부 코드 참조)

1module.exports = {
2  rules: {
3    // 네이밍 컨벤션
4    // - 헝가리안 표기법 금지
5    // - 기본 변수는 camelCase, PascalCase, UPPER_CASE 허용
6    // 근거: IDE 기능이 발전하여 헝가리안 표기법을 이용한 타입 표기는 현재 시점에서 무의미함
7    '@typescript-eslint/naming-convention': [
8      'warn',
9      // camelCase 변수, PascalCase 변수, UPPER_CASE 변수 허용
10      {
11        selector: 'variable',
12        format: ['camelCase', 'PascalCase', 'UPPER_CASE'],
13      },
14      // camelCase 함수, PascalCase 함수 허용
15      {
16        selector: 'function',
17        format: ['camelCase', 'PascalCase'],
18      },
19      // PascalCase 클래스, interfaces, type aliases, enums 허용
20      {
21        selector: 'typeLike',
22        format: ['PascalCase'],
23      },
24      // interface 앞에 I 사용 불가
25      {
26        selector: 'interface',
27        format: ['PascalCase'],
28        custom: {
29          regex: '^I[A-Z]',
30          match: false,
31        },
32      },
33      // typeAlias 앞에 T 사용 불가
34      {
35        selector: 'typeAlias',
36        format: ['PascalCase'],
37        custom: {
38          regex: '^T[A-Z]',
39          match: false,
40        },
41      },
42      // typeParameter 앞에 T 사용 불가
43      {
44        selector: 'typeParameter',
45        format: ['PascalCase'],
46        custom: {
47          regex: '^T[A-Z]',
48          match: false,
49        },
50      },
51    ],
52  } 
53}
이영준님의 프로필 사진

여긴 제가 입사할때부터 쓰고 있어서 그대로 가고 있습니다 interface 뿐아니라 함수들도 형을 따로 선언하는경우 붙이고 있습니다. I를 없애면 그걸 대체할 다른 이름이나 Suffix를 붙여야해서 걍 쓰는 것 같아여 참고로 모두 index.ts types.ts 나눠서 구현하고 있습니다. 구현부의 선언은 최대한 깔끔하게 보이기 위해(?)

kevin님의 프로필 사진

저는 개인적인취향은별로 이지만 딱히 저도딱히생각나는게없기도하고. 기존에도 그렇게 되어있어서 그렇게쓰고있어요

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!