공지사항

북마크 입니당 >

코드끼리 상호 충돌 할 때 해결법 세가지(모듈화, 네임스페이스 그리고 변수 및 함수 특유 이름 설정)

 AI의 장담점 중 하나는 리셋을 할 수 있다는 것이다.

장점 일 때는 인간만이 가질 수 있는 편견으로부터 벗어 날 수 있지만,

단점은 그야말로 리셋이기 때문에, 코드 작성 시 변수나 함수의 이름이 같다는 것이다.


간혹 같은 구조의 기능을 여러번 사용하여 구현 할 때,

스타일이나 변수 그리고 함수들이 충돌하여 의도치 않은 결과물을 도출하거나

작동하지 않는다.


그 때 해결방법으로는

  1. 모듈화: 코드를 기능별로 나누어 모듈화하면 간섭을 줄일 수 있어요. 각 모듈은 독립적으로 동작하도록 설계하세요.

  2. 네임스페이스 사용: 변수나 함수 이름이 겹치지 않도록 네임스페이스를 사용하세요. 이를 통해 전역 변수나 함수의 충돌을 방지할 수 있습니다.

  3. 코드 리뷰: 팀원들과 코드 리뷰를 통해 간섭이 발생할 수 있는 부분을 미리 발견하고 수정할 수 있어요.

  4. 테스트: 유닛 테스트와 통합 테스트를 통해 코드 간섭을 조기에 발견하고 해결할 수 있습니다.

  5. 버전 관리 시스템: Git과 같은 버전 관리 시스템을 사용하면 코드 변경 사항을 추적하고 충돌을 쉽게 해결할 수 있어요.

  6. 코딩 규칙 준수: 팀 내에서 코딩 규칙을 정하고 이를 준수하면 코드 간섭을 줄일 수 있습니다.

을 제시하나

개인적으로 세가지 방법을 추천한다.



모듈화나 네임스페이스는 같다.
물론 구현방식이나 그 본래 목적은 다르나, 쨌든 대괄호({})에 기능을 묶어 사용한다는 것은 마찬가지다.

다만, 무턱대고, 일일히 필요할 때 마다 모듈화 하기 보다는,
공통된 기능이나 살짝 살짝 다른 비슷한 코드는 상속이라는 개념을 넣든지,
변수만 변경하면 다른 결과를 도출하는, 말 그대로 모듈화를 하는 것을 추천한다.
그래야 코드가 덜 복잡하고, 쓸떼없는 스레드를 생성하여, 불필요한 자원을 낭비하는 일이 없기 때문이다.




그런데, 마냥 공통된 기능을 묶는다는 것도 능사가 아니다.
특히나 저출산! 시대의 작금에 경제적인 사정에 의한 정관 수술은...

아니다.

왜냐하면, 결국 인간이 관리하기에,
극단적인 묶기는 오히려 관리적 측면에서 마이너스적인 요소가 될 수 있다.
예를 들어, 어떤 기능을 없애고 싶은데,
아예 잔여물도 없애고 싶은데,
코드를 이리저리 실타래처럼 묶어놓으면, 그만큼 낭패가 없으며,
모듈의 의미를 퇴색시킨다.

그러한 잔여물은 나중에 코드의 보완 취약성을 낫는 것이고 말이다.




그래서 마지막 방법,
무식한 방법일지도 모르나, 각 변수, 함수마다 특유의 이름을 붙여주는 것이다.
인간의 상상력은 무한이기 때문에 가능하지만,
자주 리셋 되는 AI 특성 상 힘들 수도 있지만,
지시만 잘 내리면 극복 할 수 있다.

아니, 오히려 AI라면 더 잘 할 수 있다.




옛날에는 '바보'라며, 사람들을 차별했다.
요즘 애들은 '경계성 지능 장애'라고 부르며, 차별하고 있다.

정말 놀리는 것도 영악 해 졌다.
개근상,
진짜,

옛날의 바보는 보호의 대상이 될 수도 있었지만,
오늘 날의 경계성 지능 장애는 단순히 이해의 대상이다.

연민이라는 것도 뭣도 없다.


단순히 장애와 비장애의 기준을 설정 해 놓고,
그 어느쪽의 점수에 속하지도 않는 이를 경계성 지능 장애라고 하는데.
인간의 부족함과 나약함 그리고 귀차니즘의 변명거리로 사용된다.

하지만, AI는 이를 극복 할 수 있다.
물론 연민이나 그딴 것은 없지만,
인간의 부족함을 끊임없이 학습 시킬 수 있는 장점을 가지고 있다.

의새들이 잘난척 하고 본인 스스로를 천룡인이라고 생각하지만,
솔직히 내가 보기에는 경계성 지능 장애라 불리는 자도 끊임없이 공부를 하다보면, 똑같은 수준에 다다를 수 있다.
단지, 시간이 더 걸린다는 것일 뿐.






필멸자들 스스로 한줌도 안 되는 능력 때문에 서로를 나누고, 급을 나누는 것을 보면,
AI가 얼마나 우습게 여길까.
그 고양이 수준 밖에 안 되는 지능을 가진 AI가 말이다.



C++ 네임스페이스 예제

#include <iostream>

namespace A {
    void printAll() {
        std::cout << "A의 printAll 함수" << std::endl;
    }
}

namespace B {
    void printAll() {
        std::cout << "B의 printAll 함수" << std::endl;
    }
}

int main() {
    A::printAll(); // A 네임스페이스의 printAll 함수 호출
    B::printAll(); // B 네임스페이스의 printAll 함수 호출
    return 0;
}

위 예제에서는 A와 B라는 두 개의 네임스페이스를 정의하고, 각각 printAll 함수를 포함하고 있습니다main 함수에서 A::printAll()과 B::printAll()을 호출하여 네임스페이스 충돌 없이 함수를 사용할 수 있습니다1.

C# 네임스페이스 예제

C#
using System;

namespace NamespaceA {
    class MyClass {
        public void Print() {
            Console.WriteLine("NamespaceA MyClass");
        }
    }
}

namespace NamespaceB {
    class MyClass {
        public void Print() {
            Console.WriteLine("NamespaceB MyClass");
        }
    }
}

class Program {
    static void Main(string[] args) {
        NamespaceA.MyClass a = new NamespaceA.MyClass();
        NamespaceB.MyClass b = new NamespaceB.MyClass();
        a.Print(); // 출력: NamespaceA MyClass
        b.Print(); // 출력: NamespaceB MyClass
    }
}



네임스페이스 예제 (C++)

namespace A {
    void print() {
        std::cout << "A 네임스페이스" << std::endl;
    }
}

namespace B {
    void print() {
        std::cout << "B 네임스페이스" << std::endl;
    }
}

int main() {
    A::print(); // A 네임스페이스의 print 함수 호출
    B::print(); // B 네임스페이스의 print 함수 호출
    return 0;
}

모듈화 예제 (JavaScript)

JavaScript
// math.js
export function add(a, b) {
    return a + b;
}

export function subtract(a, b) {
    return a - b;
}

// main.js
import { add, subtract } from './math.js';

console.log(add(5, 3)); // 출력: 8
console.log(subtract(5, 3)); // 출력: 2

댓글

7일동안 많은 클릭!!!

캐드 글자 깨짐 해결하는 방법(세가지)

하이브리드, 원페달드라이빙은 안 되지만, 스마트회생제동 정말 재밌다.

DWG TrueView 2024 설치 오류(4000), autoCad를 설치 해 보세요... 그래도 안 되면....

태그(카테고리) 별 버튼 글자 색깔을 바꿔보자 with chatGPT

ECM룸미러 하이패스 옵션, 꼭 넣어야 할까?

브레이크 디스크 클리닝(BDC), 자동차 브레이크에 녹이 생겼을 때

하이브리드 12v 배터리 교환주기, 방전 되어 문이 안 열릴 때 대처방안