0Pricing
TypeScript Academy · 강의

any 형식과 피해야 하는 이유

any와 any가 TypeScript의 목적을 무력화하는 경우를 이해합니다.

any 형식과 피해야 하는 이유은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

`any` 타입은 TypeScript의 탈출구로, 변수에 대한 모든 타입 검사를 비활성화합니다. 이 학습에서는 `any`가 언제 나타나는지와 사용을 최소화해야 하는 이유를 알아봅니다.

any가 하는 일

`any` 타입의 변수에는 어떤 값이든 저장할 수 있고 어떤 연산이든 수행할 수 있습니다. TypeScript는 해당 변수에 대한 검사를 완전히 중단합니다.
let x: any = 5;
x = 'hello';       // OK
x = true;          // OK
x.nonExistent();   // No error — but crashes at runtime!

any가 퍼지는 방식

`any` 변수를 타입이 지정된 변수에 할당하면 타입이 지정된 변수도 영향을 받습니다. `any`는 코드베이스 전체로 조용히 퍼집니다.
let data: any = fetchData();
let name: string = data.name; // name is now effectively any

TypeScript가 any를 추론하는 경우

초기값과 타입 주석 없이 변수를 선언하면 TypeScript는 `any`를 추론합니다. `noImplicitAny`를 활성화하면 이를 컴파일 오류로 만들 수 있습니다.
let value; // inferred as any — dangerous!
value = 42;
value = 'hello';

// Fix:
let value2: number;

noImplicitAny 플래그

`noImplicitAny` 컴파일러 옵션(`strict`로 활성화됨)은 기본적으로 `any`로 대체하는 대신 타입 주석을 작성하도록 강제합니다.
// tsconfig.json
{ "compilerOptions": { "noImplicitAny": true } }

// Now this is an error:
function process(data) { } // Error: Parameter has implicit any type

any의 정당한 사용 사례

JavaScript를 마이그레이션하거나, 타입이 없는 외부 라이브러리를 처리하거나, 실제로 동적인 데이터를 다룰 때처럼 `any`를 피할 수 없는 경우도 있습니다. 사용 범위를 좁히고 꼭 필요한 곳에서만 사용하세요.
// Acceptable: narrow scope, clearly documented
function parseJson(raw: string): any {
  return JSON.parse(raw); // validate with Zod afterwards
}

대안으로 사용하는 타입 단언

컴파일러보다 더 많은 정보를 알고 있다면 `any` 대신 타입 단언(as Type)을 사용하세요. 구체적인 타입을 지정하므로 더 안전합니다.
const raw = JSON.parse(text) as { name: string; age: number };
console.log(raw.name); // typed correctly

any와 object

`object` 타입은 모든 비원시 값을 허용하지만 `any`와 달리 임의의 속성에 접근할 수 없습니다. 따라서 어느 정도의 안전성을 제공합니다.
let o: object = { x: 1 };
// o.x; // Error — object doesn't allow property access

let a: any = { x: 1 };
a.x; // OK — but no safety

any는 자동 완성을 비활성화합니다

안전성뿐 아니라 `any`를 사용하면 IDE의 자동 완성과 탐색 기능도 작동하지 않습니다. TypeScript가 제공하는 모든 개발 도구의 이점을 잃게 됩니다.

any를 unknown으로 대체하기

직접 제어할 수 없는 외부 데이터에는 `unknown`을 우선 사용하세요. `any`를 사용하면 무엇이든 할 수 있지만, `unknown`은 사용하기 전에 타입을 좁히도록 강제합니다.
let input: unknown = getInput();
// input.toUpperCase(); // Error — must narrow first
if (typeof input === 'string') {
  console.log(input.toUpperCase()); // OK
}

any 예산

`any`를 부채라고 생각하세요. 사용할 때마다 코드베이스의 안전성이 낮아집니다. 운영 코드에서는 `any` 타입을 0개로 만드는 것을 목표로 하세요. ESLint의 @typescript-eslint/no-explicit-any 규칙을 사용하세요.

빠른 확인

변수에 암시적인 `any` 타입이 있을 때 TypeScript가 오류를 보고하도록 만드는 컴파일러 옵션은 무엇인가요?

복습

`any` 타입은 TypeScript의 타입 검사를 비활성화하고 코드 전체로 퍼집니다. noImplicitAny를 활성화하고, 외부 데이터에는 `any` 대신 `unknown`을 사용하며, 특정한 경우에는 타입 단언을 사용하세요.

자주 묻는 질문

“any 형식과 피해야 하는 이유” 강의는 무료인가요?

네 — “any 형식과 피해야 하는 이유” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“any 형식과 피해야 하는 이유”에서 뭘 배우나요?

any와 any가 TypeScript의 목적을 무력화하는 경우를 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“any 형식과 피해야 하는 이유” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 기본 형식: string, number, boolean
  2. any 형식과 피해야 하는 이유
  3. unknown과 any 비교: 더 안전한 선택
  4. null, undefined 및 엄격한 null 검사
← TypeScript Academy(으)로 돌아가기