코딩항해기
[리뷰/코딩알려주는누나] 확장성&재사용성 높은 코드 짜는 법 본문
1. 코드 안에 하드코딩은 줄이고 매개변수를 이용한다.
function timer(){
setTimeOut(()=>{
alert("time done");
}, 3000); //3초 기다렸다가 alert창을 띄운다.
}
//만약 다른 곳에서는 시간 대기가 필요하다면?
// -> 재사용성이 떨어지는 코드이다.
function timer(time){
setTimeOut(()=>{
alert("time done");
}, time); //time만큼 기다렸다가 alert창을 띄운다.
}
2. 기본값 반환은 재사용성을 해칠 수 있다.
function setPreferFont(font){
if(font) return font; //인자로 들어온 font가 있다면 해당 폰트를
return Font.ARIAL; //없다면 ARIAL을 반환한다.
}
//하지만 다른 페이지에서 기본값이 바탕체라면?
// -> 기본값과 같은 설정은 함수를 호출하는 쪽에서 작성하는 것이 옳다.
3. 불필요한 가정은 코드 재사용성을 해친다. (=섣부른 최적화)
function getImages(){
for(section in sections){ //반복문을 돌려서
if(section.containsImage()) return section.image;
//만약 이미지가 있다면 바로 해당 이미지를 반환한다.
}
return null;
//하나도 없다면 null을 반환한다.
}
//다른 곳에서 여러 이미지가 필요하다면?
// -> 불필요한 가정은 없애고 함수를 호출하는 쪽에서 하나만 쓰는 편이 낫다.
function getImages(){
const images = []; //빈 배열을 선언한다.
for(section in sections){ //반복문을 돌려서
images.push(section.image); //배열에 이미지를 담는다.
}
return images; //배열을 반환한다.
}
4. 열거형 값을 암묵적으로 처리하지 말아야한다.
function predict(cond){
if(cond == "BUST") return false; //cond가 BUST라면 false
return true; //그 외의 모든 경우는 true
}
//만약 종류가 더 추가된다면?
//바로 true를 반환하게 되는 문제가 발생한다. (false를 반환해야하는 값일 수 있음)
// -> 하나하나 대응하는 방식으로 작성해야한다.
function predict(cond){
switch (cond){
case "BUST": //cond가 BUST라면
return false; //false를 반환한다.
case "OK": //cond가 OK라면
return true; //true를 반환한다.
}
throw new Error("이 케이스가 존재하지 않습니다."); //default로 처리가능하다.
//BUST도 아니고 OK도 아닌 값이 들어오면 Error를 발생시킨다.
//해당 케이스를 추가해야함을 개발자에게 알려줄 수 있다.
}
오용하지 않도록 하는 법
1. 값이 없을 때 null을 반환, 또는 에러를 반환하게 해야한다.
⇒ 만약 임의의 기본값이나 아무 것도 반환하지 않는다면 에러찾기가 어려워진다.
function getAge(){
if(!this.age){ //나이가 없다면
return 0; //기본값을 반환한다.
}
return this.age; //나이가 있다면 해당 나이를 반환한다.
}
//현재는 문제 없어보이지만 이 함수를 가지고 사용하게 되는 측에서 에러가 발생할 수 있다.
function getAvgAge(userList){
for(i in userList){ //반복문을 돌며
sumOfAge += parseInt(userList[i].getAge()) //user들의 나이를 캐스팅해 누적한다.
}
return sumOfAge / userList.length; //누적한 값을 userList의 길이로 나눈 값을 반환한다.
}
//없는 경우 0을 반환하기 때문에 정확한 평균값이 나올 수 없다.
//별도의 오류도 발생하지 않아 추가 조치를 해야한다는 것을 알 수 없다.
//수정한 함수
function getAge2(){
if(!this.age){ //나이가 없다면
return null; //null을 반환한다.
}
return this.age; //나이가 있다면 해당 나이를 반환한다.
}
//null을 반환하면 int로 캐스팅할 수 없으므로 오류가 발생하게 되어 문제를 알 수 있다.
2. 중요한 값은 옵셔널이면 안된다.
//옵셔널 : 선택적인 값으로 있어도 되고 없어도 된다.
function displayValue(string? text){ //text는 옵셔널
display({title:text, color:red})
}
displayValue(); //text가 옵셔널이므로 생략이 가능하다.
//실행결과 title을 보여주지 않는 문제가 발생한다.
//중요한 값은 필수값으로 둬야하며 옵셔널로 넣을 경우 별도의 조치를 취해야한다.
//(null값 검증 등)
3. 웬만하면 const를 사용하고 웬만하면 값 복제를 이용한다. (특히 배열이나 객체 reference 타입)
'IT tech' 카테고리의 다른 글
[리뷰/우아한테크] Garbage Collector (0) | 2024.10.25 |
---|---|
[리뷰/우아한테크] 오찌, 야호의 DI와 IoC (1) | 2024.10.06 |
[리뷰/우아한테크] 프람의 OAuth-이론 (0) | 2024.09.21 |
[리뷰/우아한테크] 몰리의 디버깅 (0) | 2024.09.21 |
[리뷰/우아한테크] 로건의 Transaction (0) | 2024.09.18 |