개요

함수는 추상화의 기본 빌딩 블록

추상화의 경계를 항상 올바르게 긋기는 쉽지 않다.

코드 베이스의 기능 범위가 달라지면 추상화의 경계도 움직인다.

초기에 응집도 높고 가지 일만 수행하던 함수가 이상 다른 일을 수행하게 바뀔 있다는

 

예시

function renderPerson(outStream, person){
    outStream.write(`<p>${person.name}</p>\n`);
    renderPhoto(outStream, person.photo);
    emitPhotoData(outStream, person.photo);
}
function listRecentPhotos(outStream, photos){
    photos
        .filter(p=>p.date > recentDateCutoff())
        .forEach(p=>{
            outStream.write("<div>\n");
            emitPhotoData(outStream, p)
            outStream.write("</div>\n");
        });
}
function emitPhotoData(outStream, photo){
    outStream.write(`<p>제목: ${photo.title}</p>\n`);
    outStream.write(`<p>날짜: ${photo.date.toDateString()}</p>\n`);
    outStream.write(`<p>위치: ${photo.location}</p>\n`);
}
위치 정보만 다르게 해야 한다.


function emitPhotoData(outStream, photo){
    zztmp(outStream, photo);
    outStream.write(`<p>위치: ${photo.location}</p>\n`);
}
function zztmp(outStream, photo) {//이동하지 않을 코드
    outStream.write(`<p>제목: ${photo.title}</p>\n`);
    outStream.write(`<p>날짜: ${photo.date.toDateString()}</p>\n`);
}


function renderPerson(outStream, person){
    outStream.write(`<p>${person.name}</p>\n`);
    renderPhoto(outStream, person.photo);
    zztmp(outStream, person.photo);
    outStream.write(`<p>위치: ${photo.location}</p>\n`);
}


function listRecentPhotos(outStream, photos){
    photos
        .filter(p=>p.date > recentDateCutoff())
        .forEach(p=>{
            outStream.write("<div>\n");
            zztmp(outStream, p)
            outStream.write(`<p>날짜: ${photo.date.toDateString()}</p>\n`);
            outStream.write("</div>\n");
        });
}
function renderPerson(outStream, person){
    outStream.write(`<p>${person.name}</p>\n`);
    renderPhoto(outStream, person.photo);
    emitPhotoData(outStream, person.photo);
    outStream.write(`<p>위치: ${photo.location}</p>\n`);
}
//기존 emitPhotoData제거 후 새 함수 이름 emitPhotoData로 변경
function listRecentPhotos(outStream, photos){
    photos
        .filter(p=>p.date > recentDateCutoff())
        .forEach(p=>{
            outStream.write("<div>\n");
            emitPhotoData(outStream, p)
            outStream.write(`<p>날짜: ${photo.date.toDateString()}</p>\n`);
            outStream.write("</div>\n");
        });
}
function emitPhotoData(outStream, photo) {
    outStream.write(`<p>제목: ${photo.title}</p>\n`);
    outStream.write(`<p>날짜: ${photo.date.toDateString()}</p>\n`);
}

 

 

+ Recent posts