SCSS에서 @import와 @use는 모두 다른 스타일시트를 가져오는데 사용되지만 용도와 동작 방식이 다릅니다. 요즘은 @use를 더 권장한다고 하는데요. @import와 @use의 차이점이 뭔지, @use를 권장하는 이유는 무엇인지 알아보겠습니다.
@import
기존의 SCSS부터 스타일시트를 가져올 때 사용하던 방식입니다. @import로 스타일 시트를 가져오면 모든 변수, 믹스인, 함수를 전역으로 추가합니다. 또 같은 파일을 여러번 불러올 수 있어 성능 문제나 충돌을 일으킬 수 있습니다.
@use
@use는 모듈 시스템을 기반으로 스타일 시트를 가져오며 자체적인 로컬 스코프를 가집니다. 또 독자적인 네임스페이스를 사용하기 때문에 충돌을 방지할 수 있습니다. @import와는 달리 같은 파일을 여러번 가져와도 한번만 로드됩니다.
// base.scss
$primary-color: blue;
body {
color: $primary-color;
}
// main.scss
@use 'base';
h1 {
color: base.$primary-color; // base 모듈의 $primary-color 사용
}
위의 예시처럼 @use로 스타일시트를 불러오면, 파일 이름을 접두사로 하는 네임스페이스를 사용해야만 변수나 믹스인에 접근할 수 있습니다. 어디서나 간편하게 변수를 쓸 수 있는 @import보다는 살짝 까다로운 느낌을 주네요.
그래서 네임스페이스를 보다 간단하게 이용할 수 있도록, 별칭을 지정할 수 있답니다.
@use 'base' as b; // base를 b로 줄여서 사용
h1 {
color: b.$primary-color;
}
이렇게, 파일명 대신 'b'라는 별칭을 붙여서, 접두사를 간략하게 줄여보았습니다. 이것도 복잡하다면, 아예 전역스코프처럼 접두사 없이 사용할 수도 있습니다.
@use 'base' as *; // 전역 스코프처럼 사용
h1 {
color: $primary-color;
}
이렇게 별칭을 '*'로 붙이면, 접두사 없이 간단하게 사용할 수 있습니다 (권장하진 않습니다).
@import와의 작별을 준비해야 할 때
현재의 scss에서 @use를 권장하는 이유를 간단히 설명하자면, 더 나은 모듈화, 충돌방지, 효율적인 코드관리가 가능하기 때문입니다. @import처럼 전역으로 변수,함수,믹스인이 노출되면, 이름이 중복되는경우 충돌이 발생할 가능성이 높습니다. @use에서 네임스페이스를 사용하는 이유가 이런 충돌을 방지하기 위함입니다. 또한 같은 파일을 한번만 로드하기 때문에 불필요한 중복 로드를 피할 수 있고, 빌드 성능이 개선됩니다.
Sass팀 또한 @import를 더이상 개선하지 않고, @use를 SCSS의 공식적 모듈 시스템이라 발표하기도 했습니다. 장기적으로 보아 @import는 사라질 가능성이 있다는 소리입니다.
'👩💻 > CSS, SCSS' 카테고리의 다른 글
SCSS 활용 팁 8. 보간 기능을 사용하여 동적으로 경로 관리하기 (0) | 2025.01.16 |
---|---|
SCSS 활용 팁 7. 스타일시트를 효율적으로 모듈화 하기 위한 7-1패턴 (0) | 2025.01.15 |
SCSS 활용 팁 6. 참조 선택자 "&"을 활용하여 BEM 방법론에 따라 클래스 네이밍하기 (0) | 2025.01.13 |
SCSS 활용 팁 5. 믹스인(mixin)으로 반응형 중단점 쉽게 관리하기 (0) | 2025.01.10 |
SCSS 활용 팁 4. @extend를 이용한 스타일 상속 (0) | 2025.01.08 |