# F‑35 전투기용 C++ 코딩 표준 완전 정복 (55자)

---

# # 서론 – 방산 소프트웨어가 왜 엄격한 코딩 규칙을 필요로 할까?

F‑35 전투기와 같은 5세대 전투기의 비행 제어·무기 시스템은 **수천 개의 C++ 모듈**이 복잡하게 얽혀 있습니다.

하나의 작은 버그가 **수천 명의 생명**에 직결될 수 있기 때문에, 코드의 **가독성·안전성·보안성**을 보장하는 **코딩 표준**이 반드시 존재합니다.

이 글에서는 **F‑35 전투기용 C++ 코딩 표준**을 초보자도 이해할 수 있도록 쉬운 예시와 함께 정리하고, 실제 프로젝트에 바로 적용할 수 있는 팁을 제공하겠습니다.

> **SEO 키워드**

> 1. `F-35 코딩 표준`

> 2. `C++ 코딩 가이드`

> 3. `방산 소프트웨어`

---

# # 1️⃣ 기본 스타일 규칙 – 가독성과 일관성을 위한 첫걸음

| 구분 | 규칙 | 예시 |

|------|------|------|

| **네이밍** | 클래스·구조체 → `PascalCase`<br>함수·변수 → `camelCase` | `class FlightControlSystem`<br>`int maxAltitude` |

| **접근 지정자 순서** | `public → protected → private` 순서 고정 | 
```
cpp\nclass WeaponSystem {\nprivate:\n    int ammoCount;\nprotected:\n    void reload();\npublic:\n    void fire();\n};\n
```
 |

| **파일 헤더** | 파일 최상단에 프로젝트·모듈 설명·저작권·`#pragma once` 삽입 | 
```
cpp\n//===================================================================\n//  Module : FlightControl\n//  Author : Lockheed Martin\n//  Date   : 2024-03-01\n//===================================================================\n#pragma once\n
```
 |

| **주석** | Doxygen 스타일 (`/** … */`) 사용, 함수·클래스 바로 위에 배치 | 
```
cpp\n/**\n * @brief 무기 발사 함수\n * @param target 목표 좌표\n */\nvoid fire(const Vector3& target);\n
```
 |

> **Tip**: 가독성은 **버그 예방**과 **팀 협업 효율**을 2배 이상 높여 줍니다.

---

# # 2️⃣ 메모리 관리 – 실시간 시스템을 위한 “스택 우선” 정책

1. **스택 사용을 기본** – 힙 할당은 반드시 검증된 경우에만 사용한다.

2. **RAII**(Resource Acquisition Is Initialization) 적용 – 객체 생성 시 자원을 획득하고, 소멸 시 자동 해제한다.

3. **스마트 포인터 제한** – `std::unique_ptr`는 허용하지만, `std::shared_ptr`는 메모리 오버헤드와 비결정성을 초래하므로 금지한다.

```
cpp

// RAII 예시 – 자동 해제

class RadarBuffer {

public:

    RadarBuffer() : pData(new uint8_t[SIZE]) {}

    ~RadarBuffer() { delete[] pData; }   // 자동 해제

private:

    uint8_t* pData;

};

```

---

# # 3️⃣ 멀티스레딩 – 데이터 레이스 절대 금지

| 항목 | 적용 방법 |

|------|-----------|

| **뮤텍스** | `std::mutex` + `std::lock_guard` 로 범위 기반 잠금 |

| **원자성** | `std::atomic` 으로 단일 변수는 lock‑free 처리 |

| **Lock‑free 구조** | 검증된 경우에만 사용(예: 고정 크기 큐) |

| **스레드 우선순위** | 실시간 스레드에는 **POSIX real‑time** 스케줄링 사용 |

```
cpp

std::mutex telemetryMtx;

void updateTelemetry(const Telemetry& data) {

    std::lock_guard<std::mutex> lock(telemetryMtx);

    telemetry = data;   // 안전한 업데이트

}

```

---

# # 4️⃣ 예외 처리 정책 – “예외는 금지” 원칙

* **예외 비활성화** – 모든 함수는 `noexcept` 로 선언하고, 오류는 **리턴값** 혹은 **에러 코드** 로 전달한다.

* **에러 로그** – `timestamp`, `module`, `errorCode` 를 포함한 구조체를 파일에 기록한다.

```
cpp

bool initSensors() noexcept {

    if (!sensorA.init()) return false;

    if (!sensorB.init()) return false;

    return true;

}

```

> **왜 예외를 금지할까?** 실시간 시스템에서는 예외가 발생하면 **스택 언와인딩** 과정에서 예측 불가능한 지연이 발생해 **제어 주기가 깨질** 수 있다.

---

# # 5️⃣ 정적 분석·자동 포맷 – 품질을 코드 단계에서 보장

| 도구 | 역할 |

|------|------|

| **Cppcheck** | 메모리 누수·범위 초과 등 위험 코드 탐지 |

| **Clang‑Tidy** | 최신 C++ 규칙(예: `auto` 남용) 검사 |

| **clang‑format** | 프로젝트 전체 코드 스타일을 일관되게 유지 |

| **CI 파이프라인** | PR마다 자동 검증을 수행해 표준 위반을 사전에 차단 |

> **실전 팁**: `.clang-format` 파일을 프로젝트 루트에 두고, `git commit` 전 `git clang-format` 훅을 걸어두면 **코드 스타일 오류**를 자동으로 방지할 수 있다.

---

# # 6️⃣ 테스트와 검증 – 코드 품질을 최종 확인

1. **유닛 테스트** – GoogleTest 로 각 모듈을 독립적으로 검증한다.

2. **하드웨어‑인‑루프(HIL)** – 실제 비행 제어 보드에 코드를 올려 실시간 성능을 측정한다.

3. **코드 커버리지** – 최소 80% 이상을 목표로 하며, 커버리지 미달 부분은 반드시 추가 테스트를 작성한다.

---

# # 7️⃣ 적용 예시 – 간단한 비행 제어 모듈 구현

```
cpp

// FlightControl.h

# pragma once

/** @brief 비행 고도 제어 클래스 */

class FlightControl {

public:

    FlightControl() noexcept;

    ~FlightControl() noexcept = default;

    /** 현재 목표 고도를 설정한다. */

    void setTargetAltitude(double altitude) noexcept;

    /** 현재 고도를 반환한다. */

    double getCurrentAltitude() const noexcept;

private:

    double m_targetAltitude;   // 목표 고도

    double m_currentAltitude;  // 현재 고도

};

```

```
cpp

// FlightControl.cpp

# include 'FlightControl.h'

# include <algorithm>

FlightControl::FlightControl() noexcept

    : m_targetAltitude(0.0), m_currentAltitude(0.0) {}

void FlightControl::setTargetAltitude(double altitude) noexcept {

    // 고도는 0~20000m 사이만 허용

    m_targetAltitude = std::clamp(altitude, 0.0, 20000.0);

}

double FlightControl::getCurrentAltitude() const noexcept {

    return m_currentAltitude;

}

```

*위 코드는 **네이밍, 파일 헤더, noexcept, std::clamp** 등 F‑35 코딩 표준을 모두 적용한 예시입니다.*

---

# # 결론 – 지금 바로 적용해 보세요!

F‑35 전투기용 **C++ 코딩 표준**은 **가독성**, **메모리 안전**, **멀티스레드 안정성**, **예외 금지** 네 축을 중심으로 설계되었습니다. 위 7가지 규칙만이라도 프로젝트에 적용한다면, 코드 품질이 눈에 띄게 향상되고 방산 수준의 **안전 요구사항**을 충족시킬 수 있습니다.

> **행동 유도**: 오늘은 레포지토리 루트에 `.clang-format` 과 `cppcheck` 설정 파일을 추가하고, 가장 간단한 모듈(`FlightControl`)에 위 표준을 적용해 보세요. 작은 변화가 **시스템 전체의 안정성**을 크게 높여 줍니다.

---

## # SEO 키워드 정리

- `F-35 코딩 표준`

- `C++ 코딩 가이드`

- `방산 소프트웨어`

---

*궁금한 점이나 적용 경험을 댓글로 공유해 주세요! 여러분의 피드백이 다음 글을 더 풍부하게 만듭니다.*
