1. 하드코딩이란?
- 하드코딩은 코드내에 직접 값을 고정적으로 지정하는 것을 말한다. 주로 값, 구문, 경로 3가지가 주요하다.
- 간단한 예시를 통해서 보면
#python
print("hello world!")
- 여기서 우리는 "hello world!" 를 출력하도록 고정적으로 지정해줬다.
- 이렇게 되면 다른 메세지를 출력하고 싶으면 코드 자체를 수정해줘야한다. (ex) print("goodbye world!")
- 다른 예시로는
//JAVA
int discount = 10;
totalPrice = originalPrice - (originalPrice * (discount / 100));
- 이런 코드가 있다고 가정하자
- 여기서 우리는 상품의 할인율을 10%로 강제하여 discount 라는 변수에 할당해주었다.
- 마찬가지로 여러분들이 관리자라고 가정하고 할인율을 바꿔준다고 하면 직접 저 변수를 찾아서 변수의 값 자체를 변경해줘야한다.
- 이런 구문이나 변수의 값 말고 경로를 하드코딩하는 경우도 있다.
import os
#python
file_path = "/Users/username/Documents/example.txt"
# 파일 경로에 접근하기 위한 작업
if os.path.exists(file_path):
with open(file_path, 'r') as file:
contents = file.read()
print(contents)
else:
print("파일이 존재하지 않습니다.")
- 여기서 file_path라는 변수에 우리가 접근하고 싶은 파일의 경로를 직접 하나하나 다 찾아서 넣어주었다.
- 그럼 만약에 여러분들이 파일의 위치를 옮기거나 저 경로 상의 폴더 중에 하나라도 이름이 바뀌면?
- 일일이 수정을 해주어야한다.
2.소프트코딩이란?
- 위와 반대되는 개념이 소프트코딩이다.
- 소프트코딩은 값들을 변수나 데이터베이스 같은 외부리소스에 저장하고, 코드에서는 해당 값을 참조하는 방식을 말한다.
- 쉽게 비유해보면 우리가 중국집에 주문을 한다고 했을 때, 하드코딩은 해당 중국집 번호 자체를 외워서 전화를 거는 방식이면 소프트 코딩은 해당 전화번호가 있는 책자를 통해서 전화를 거는 방식이다.
#python
welcomeMessage = "hello world!"
print(welcomeMessage)
- 아까 코드와 살짝 다른 모습이다.
- 우리가 비교해서 볼 코드는 print 함수가 있는 코드이다.(welcomeMessage는 하드코딩 되어있는 것이 맞으니 헷갈리지 마세요.)
- 전에는 print함수에 직접 넣어줬다면, 이번에는 welcomeMessage 라는 변수에 넣어서 print는 해당 변수를 참조해서 동작하는 것을 알 수 있다.
- 위 코드만 봤을 때는 소프트코딩의 장점이 잘 안보일 수 있다. 차이만 집중해서 보여주기 위해 작성한 코드이므로 좀더 보안을 하자면
name = input("이름을 입력하세요: ")
print("안녕하세요, " + name + "님!")
- 위에 코드는 사용자로부터 직접 입력을 받고, 그 입력을 name이라는 변수를 통해 출력해준다.
- 소프트코딩은 유연하다! 라는 말의 의미를 이해할 수 있을 것이라 본다.
- 마지막으로 경로에 해당하는 코드를 소프트코딩으로 수정해보자.
import os
# 사용자의 홈 디렉토리 경로를 가져옴
home_dir = os.path.expanduser("~")
# "Documents" 폴더 경로와 파일명을 변수로 지정
documents_dir = os.path.join(home_dir, "Documents")
file_name = "example.txt"
# 파일 경로를 변수로 지정
file_path = os.path.join(documents_dir, file_name)
if os.path.exists(file_path):
with open(file_path, 'r') as file:
contents = file.read()
print(contents)
else:
print("파일이 존재하지 않습니다.")
- 하드 코딩때의 예시와는 다르게 "Documents"폴더와 "example.txt"파일에 대한 정보를 변수로 지정해서 소프트코딩을 한 모습니다.
- os.path.join()함수를 사용해서 사용자의 홈 디렉토리의 경로와 하위 경로를 동적으로 결합하고, 파일 경로를 변수로 생성했다.
- 이러면 하드코딩과는 다르게 만약 여러분의 홈 디렉토리가 "/Users/username"가 아닌 환경에서 작업한다고 했을 때, 하드코딩을 했다면 저 디렉토리를 여러분들의 환경에 맞춰서 수정해야겠지만
- 위처럼 소프트코딩을 하면 유연하게 Documets폴더안에 이쓴 example.txt 파일을 찾을 수 있다.
- 즉 여러분의 코드가 동작을 유연하게 할 수 있고 확장할 때도 훨~씬 편할것이다.
3. 비교
3-1. 하드코딩
- 만약 여러분들이 파이썬을 처음 해본다고 가정할 때, 아마 첫 시작은 print("hello world!") 일 텐데,
- 저 코드를 굳이 변수에다가 문자열 저장해서 그 문자열을 출력할 필요은 없지 않은가
- 하드코딩은 간단하고 빠르게 코드를 작성할 수 있는 장점이 있다.
- 하지만 값의 변경에 취약하고 코드를 직접 수정해야 한다. 사실 정말 단순한게 아닌 이상 하드코딩은 지양해야 한다.
- 다른 사용자나 다른 환경에서도 문제가 발생할 수 있고 나중에 코드가 많고 복잡해지면 오류를 찾아내기도 힘들어진다.
3-2 소프트코딩
- 사실상 하드코딩의 단점을 극복하기 위한 방식이다.
- 값이 변경될 경우, 외부 요소를 수정하여 코드 자체는 그대로 사용할 수 있다.
- 여러 환경에서도 유연하게 작동할 수 있다.
- 그렇기 때문에 자연스럽게 유지보수와 확장성이 높아질 것이다.
- 단점으로는 초기 설정을 하거나 구조를 짜야 한다는 점이다.(근데 사실상 이거하려고 코딩하는 거 아닌가)
- 그리고 당연히 당장에는 하드코딩보다야 코드가 좀더 복잡해 질 수 밖에 없다.
4. 요약
- 사실 정석적으로 하드코딩 소프트코딩 사이좋게 장단점 있으니까 여러분들 상황에 맞춰서 쓰세요~
- 라는 말도 맞는 말인데,
- 하드코딩에 좋은 "상수" 가 있으니 상수를 사용하는 게 아니라면 하드 코딩할 일은 크게 많지 않을 것이다.
- 소프트코딩 단점으로 복잡하거나 초기설정을 해야한다 등등을 말했는데, 사실 조금 쥐어짠듯한 억까성 단점이고, 소프트코딩을 적극적으로 활용해서 코딩을 하도록 하자.
'CS > Terminology' 카테고리의 다른 글
IT용어 - 메모리 누수(memory leak) (0) | 2023.07.10 |
---|---|
IT용어 - 린터(linter) (0) | 2023.07.08 |