데이터 값을 프로그램에 하드 코딩하면 이점이 있습니까?


13

나는 자율적이고 초보자 같은 코더이므로 프로그래머 링고를 못쓰게되면 사과드립니다.

나는 데이터에 대한 쿼리에서 보고서를 생성하는 도구를 본질적으로 만드는 개발자에게 지속적으로 업데이트되는 데이터를 제공하는 프로젝트를 진행하고 있습니다.

관련된 모든 사람들은 데이터 생성 (스키마가 아니라 도메인 / 값 자체)을 보고서 생성 프로그램에 하드 코딩해야한다고 생각하는 것 같습니다.

예를 들어 직원에 대해보고한다고 가정합니다. 보고서는 각 부서에 대한 제목과 함께 범주로 분할 된 다음 각 부서 아래에 직책의 소제목이되고 각 소제목 아래에 직원 목록이 표시됩니다. 개발자는 부서와 직책을 하드 코딩하려고합니다. 반면에, 나는 그들이 런타임에 그런 것들을 쿼리하고, 그것들을 기준으로 레코드를 정렬하고, 어떤 값이 있는지에 따라 동적으로 보고서 헤더를 생성 할 수 있다고 생각합니다.

잠재적 가치 목록은 시간이 지남에 따라 변경되므로 (예 : 부서가 생성 / 이름 변경되고, 새로운 직책이 추가됨) 코드를 지속적으로 업데이트해야합니다. 코드 유지 관리 단계를 건너 뛰고 보고서를 동적으로 구성 할 수있는 것 같습니다.

나는 개발자가 아니기 때문에 내가 무엇을 놓치고 있는지 궁금합니다. 이와 같은 도구에 값을 하드 코딩하면 어떤 이점이 있습니까? 이것은 일반적으로 프로그램 설계 방식입니까?



행의 값이 열로 표시되어야한다는 의미의 보고서 크로스 탭입니까?
Tulains Córdova

1
@Brendan-보고서에 값을 하드 코딩하는 경우 두 곳 (데이터 소스 및 보고서)의 목록을 변경해야하지만 보고서가 동적 인 경우 한 위치 (보고서)에서만 변경하면됩니다. .
kwah

1
@Brendan 왜 당신은 세 위치로 끝나겠습니까? 아마도 내 이해가 올바르지 않지만 데이터베이스에서 데이터를 가져 오기 위해 SQL 쿼리를 구상 중입니다. 응용 프로그램은 부서와 같은 반환 값을 집계 / 그룹화합니다. 여러 DB 쿼리에 오버 헤드를 기꺼이 원한다면 실제로 원하는 부서 / 역할 제목을 선택할 수 있습니다. 데이터가 둘 이상의 위치에 존재하는 것은 아닙니다. 보고서는 데이터에 의해 구동됩니다.
kwah

1
@Brendan 나는 또한 한 장소에 대한 당신의 정의에 동의하지 않습니다-소스 코드 전체에 흩어져있는 여러 위치에있는 방법.
kwah

답변:


9

위키 백과 :

하드 코딩 (하드 코딩 또는 하드 코딩)은 아마도 소급해서 만 입력 또는 구성 데이터로 간주 될 수있는 것을 프로그램 또는 기타 실행 가능한 개체의 소스 코드에 직접 포함하거나 데이터를 외부 소스에서 가져 오거나 지정된 입력으로 프로그램 자체에서 데이터를 생성하거나 형식을 지정하는 대신

하드 코딩은 반 패턴으로 간주됩니다.

안티 패턴으로 간주되는 하드 코딩은 최종 사용자가 프로그램 외부의 일부 수단으로 세부 사항을 변경하는 것이 더 편리한 경우 입력 데이터 또는 원하는 형식이 변경 될 때마다 프로그램의 소스 코드를 변경해야합니다.

때로는 피할 수 없지만 일시적이어야합니다.

하드 코딩이 종종 필요합니다. 프로그래머는 최종 사용자를위한 동적 사용자 인터페이스 솔루션이 없을 수 있지만 여전히 기능을 제공하거나 프로그램을 릴리스해야합니다. 이것은 일반적으로 일시적이지만 단기적으로 코드를 전달해야하는 압력을 해결합니다. 나중에, 사용자가 최종 사용자에게 결과 또는 결과를 수정할 수있는 매개 변수를 전달할 수 있도록 소프트 코딩이 수행됩니다.

  • 메시지를 하드 코딩하면 프로그램을 국제화하기가 어렵습니다.
  • 하드 코딩 경로는 다른 위치에 적응하기가 어렵습니다.

하드 코딩의 유일한 장점은 코드를 빠르게 전달하는 것 같습니다.


5
그러나 "단일 장점"은 종종 매우 중요합니다. 프로그래밍의 디자인 결정은 종종 미래의 교정과 빠른 전달 간의 절충에 관한 것이므로 하드 코딩은 완벽하게 수용 가능한 선택이 될 수 있습니다. 때로는 하지 하드 코딩 나쁜 디자인 선택이 될 것입니다.

-1 이것이 유용한 답변이라고 생각하지 않습니다. 본질적으로 '부적절하게 소스 코드에 값을 포함시키는 것'은 부적절합니다. OP는 언제 소스 코드에 속할 것인지에 대한 지침을 원하므로 Wikipedia 정의를 벗어납니다.
Nathan Cooper

하드 코딩은 프로세스의 중요한 부분이어야하며 마이크로 서비스 시대에는 안티 패턴이 오래되었다고 생각합니다. Angular Tour of Heroes 튜토리얼은 다음과 같이 직접 강화하거나 위임하는 거대한 소프트웨어 하우스의 중요한 예입니다. 중간 단계. 또한 동적 데이터로 이동할 때 환경 변수 또는 코드 자체의 부울 토글에 의해 제어되는 대체 코드로 일부 하드 코딩 된 데이터를 유지해야하므로 버그 및 보안 문제를 올바르게 격리 할 수 ​​있습니다. 선.
Google 검색의 내용

24

정말? 유효한 유스 케이스가 없습니까?

하드 코딩 이 일반적으로 반 패턴 이거나 최소한 매우 나쁜 코드 냄새 라는 데 동의하지만 , 그럴만한 경우가 많이 있습니다.

  • 단순성 ( YAGNI ),
  • 입력은 실제로 일정하며 변경되지 않습니다 (즉, 자연 또는 비즈니스 상수 또는 근사값을 나타냅니다 (예 : 0, PI, ...)).
  • 임베디드 소프트웨어 (메모리 및 할당 제약 조건이 떠오름)
  • 보안 소프트웨어 (이러한 값은 암호화 토큰 및 솔트와 같이 해독 및 역 엔지니어링하기 어렵거나 해독 할 수 없음),
  • 생성 된 코드 (전 처리기 또는 생성기는 구성 가능하지만 하드 코딩 된 값으로 코드를 뱉어 냄),
  • 그리고 아마도 몇 가지 더.

아직도 안티 패턴 ? 너무 엔지니어링입니다 ! 소프트웨어의 수명에 관한 것입니다 !!

나는 큰 이유가 있다고 말하고있는 것이 아니라 일반적으로 하드 코딩 된 값을 사용합니다. 그러나 일부는 유효한 이유로 쉽게 패스를 얻을 수 있습니다.

그리고 단순성 / YAGNI 에 관한 첫 번째 것도 사소한 것으로 생각하지 마십시오. 좁은 사용 사례에 대해 하나의 작업을 수행하는 간단한 스크립트에 대해 미친 파서와 값 검사기를 구현할 이유가 없을 것입니다.

균형을 찾기가 어렵습니다. 때로는 소프트웨어가 시작된 간단한 스크립트보다 더 길어지고 오래 지속될 것이라고 예측하지 못합니다. 때때로, 그것은 다른 방법입니다 : 우리는 일을 과도하게 엔지니어링하고, 프로젝트는 Pragmatic Programmer를 읽는 것보다 더 빨리 선반에 놓입니다. 초기 프로토 타입이 필요했던 것보다 시간과 노력을 낭비했습니다.

그것은 안티 패턴의 의미입니다. 스펙트럼의 두 극단에 모두 있으며 외형은 코드를 검토하는 사람의 감도에 달려 있습니다.


나는 이것을 직접 시험했기 때문에 재미 있었고, 값을 동적으로 처리하는 것이 훨씬 쉽고 빠르며 깨끗했습니다. 나는 파이썬에서 그것을했지만, 최종 제품은 Java로 코딩 될 것이라고 믿습니다. 들어오는 각 열을 여러 위치에서 추적해야하기 때문에 값을 하드 코딩 할 때 과도하게 엔지니어링되었다고 느꼈습니다.
Tom

@Tom : 하드 코딩 된 값을 사용하는 것보다 구성 조회 라이브러리를 구현하는 것이 더 쉽고 빠르다는 말입니까? 당신에게 좋습니다. 또한, 나는 당신의 마지막 문장이 오버 엔지니어링의 정의에 어떻게 맞는지 모르겠습니다. 그것은 분명히 지저분한 느낌이들 것입니다. 하드 코딩되고 복제 된 경우 훨씬 더 나쁩니다 (질문의 요점은 아니었을 것입니다. 매번, 그러나 프로그램의 단일 지점에서).
haylem

어쨌든, 나는 그것이 유효한 사례를 지적하고 있습니다. 나는 또한 그것이 나의 마지막 문장에서 논란이 될 것이라고 지적하고있다. 모든 사람과 팀이 다양한 기술 수준을 가진 사람들을 기쁘게 할 수는 없습니다.
haylem

1
@Tom, 너무 짧게 팔지 마십시오. 당신은 분명히 무언가에 있습니다. 하드 코딩이 아닌 부서 및 직함 필드를보고 데이터를 구성하는 빠른 알고리즘을 작성하는 것이 더 쉽고 시간이 덜 들리는 것처럼 들립니다 Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']. 새로운 부서 또는 직책이 도입 된 경우 하드 코딩 된 어레이를 유지 관리하는 것이 훨씬 더 어려울 것입니다.
Chris G

1
여전히 하드 코딩하기 쉬운 복잡한 것들을 가질 수 있습니다. 내가 몇 년 전에 썼다는 것을 명심하는 것은 값 집합의 가능한 모든 순열이었습니다. 임의의 유효한 방향을 찾아서 임의의 순열을 선택한 다음 첫 번째 유효한 결과를 얻는 것이 훨씬 효율적인 솔루션이었고 O (N ^ 3) 루프 효율이 중요하기 때문에 가장 효과적인 솔루션이었습니다.
Loren Pechtel

4

값을 하드 코딩해도 괜찮습니다. 예를 들어, 0과 같은 숫자 또는 알고리즘 목적으로 특정 값이어야하는 비트 마스크에 대한 하나 또는 여러 n ^ 2-1 값이 있습니다. 이러한 값을 구성 가능 항목에 허용하면 아무런 가치가 없으며 문제의 가능성 만 열립니다. 다시 말해, 값을 변경하면 문제가 해결 될 경우 하드 코딩해야합니다.

당신이 준 예제에서, 하드 코딩이 유용한 곳을 보지 못했습니다. 언급 한 모든 내용은 제목을 포함하여 이미 데이터베이스에 있어야합니다. 프리젠 테이션을 구동하는 항목 (예 : 정렬 순서)이없는 경우 추가 할 수 있습니다.


감사. 정렬 순서는 내가 가진 하나의 관심사였습니다. 그러나 우리의 경우에는 중요하지 않으며 데이터베이스의 다른 테이블로 추가 될 수도 있다고 생각하지 않았습니다.
Tom

1
DB 에서이 모든 것을 관리하는 것이 하나의 옵션이라는 점에 유의해야합니다. 구성 파일이나 다른 솔루션을 사용할 수도 있지만 하드 코딩은 적합하지 않은 것으로 보입니다. DB 옵션은 사용자가 옵션을 관리 할 수있는 인터페이스를 쉽게 만들 수 있기 때문에 자주 사용됩니다. 같은 도구도있다 특별히 이러한 목적을 위해 설계되었습니다.
JimmyJames

-1

하드 코딩 된 값을 최종 사용자가 대신 구성 할 수있는 강력한 솔루션을 구현하려면 해당 값의 강력한 유효성 검사가 필요합니다. 빈 줄에 넣었습니까? 숫자 여야하는 곳에 숫자가 아닌 것을 넣었습니까? 그들은 SQL 주입을하고 있습니까? 기타.

하드 코딩은 이러한 위험을 많이 피합니다.

하드 코딩이 항상 또는 종종 좋은 아이디어라고 말하는 것은 아닙니다. 이것은 고려해야 할 요소 중 하나 일뿐입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.