동적 타이핑과 정적 타이핑은 주로 변수의 데이터 타입이 결정되는 시점과 타입 검사의 방식
동적 타이핑(Dynamic Typing)
# 동적 타이핑 예시 (Python)
x = 10 # x는 정수 타입으로 초기화
x = "Hello" # 이후 문자열 타입으로 변경
print(x) # 실행 시 오류 없음
정적 타이핑(Static Typing)
// 정적 타이핑 예시 (Java)
int x = 10; // x는 정수 타입으로 선언
x = "Hello"; // 컴파일 오류: 타입이 맞지 않음
System.out.println(x);
동적 타이핑(Dynamic Typing)과 정적 타이핑(Static Typing)의 개념은 이론적으로 이해하는 것도 중요하지만, 백엔드 개발자로서 실습을 통해 차이를 체감하는 것이 훨씬 더 큰 도움이 됩니다. 다음은 실습 아이디어와 학습 방향입니다:
동적 타이핑 언어와 정적 타이핑 언어를 각각 사용해 동일한 기능을 구현해 봅니다.
# Python (동적 타이핑)
from flask import Flask, jsonify, request
app = Flask(__name__)
users = []
@app.route('/user', methods=['POST'])
def add_user():
user = request.json # 타입이 자유롭고 미리 정의되지 않음
users.append(user)
return jsonify(user), 201
@app.route('/users', methods=['GET'])
def get_users():
return jsonify(users)
if __name__ == '__main__':
app.run(debug=True)
// Java (정적 타이핑)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@SpringBootApplication
public class UserApp {
public static void main(String[] args) {
SpringApplication.run(UserApp.class, args);
}
}
@RestController
@RequestMapping("/user")
class UserController {
private final List<User> users = new ArrayList<>();
@PostMapping
public User addUser(@RequestBody User user) {
users.add(user);
return user;
}
@GetMapping
public List<User> getUsers() {
return users;
}
}
class User {
private String name;
private int age;
// Getter & Setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
# 잘못된 입력 예시 (String 대신 Number 전송)
{
"name": 12345,
"age": "twenty"
}
type hints와 mypy를 활용# Python with Type Hints
from typing import List, Dict
users: List[Dict[str, str]] = []
def add_user(name: str, age: int) -> Dict[str, str]:
user = {"name": name, "age": age}
users.append(user)
return user
JavaScript 기반 백엔드(Node.js) 개발을 TypeScript로 전환하며 동적 타이핑의 한계를 극복하는 경험을 쌓아보세요.
// TypeScript Example
interface User {
name: string;
age: number;
}
const users: User[] = [];
const addUser = (user: User): void => {
users.push(user);
};
실습을 진행하면서 코드와 타입 관련 이슈를 기록하면 면접에서도 큰 장점으로 작용할 수 있습니다!