legacy란?

|

개인 공부 내용을 정리한 글입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!


legacy

개발자 친구들과 대화를 하다보면 레거시, 레거시하며 레거시라는 단어를 많이 들어볼 수 있을 것이다.
그렇다면 레거시라는 건 무슨 말을 의미하는 것일까?

레거시 프로그램, 레거시 데이터, 레거시 코드와 같은 말속의 레거시라는 것은 프로그래밍 언어, 플랫폼 그리고 기술 등에 있어서 과거로부터 물려 내려온 것을 의미한다. 컴퓨터를 사용하는 대부분의 기업들은 중요한 업무를 처리하는 레거시 응용 프로그램과 데이터베이스들을 가지고 있다. 즉, 레거시 시스템은 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등을 말한다.

말이 너무 어려운데, 그냥 간단하게 말하면 아래와 같다.

레거시의 사전적인 의미는 (남이 남긴)유산으로 해석할 수 있다.
레거시 코드란 다른 사람에게 넘겨받은 읽기 어렵고 수정하기 오래된 어려운 코드

기술의 변화가 많은 프로젝트들에 있어서 시간이 지나면서 기술이 발전하고 그러면 그럴수록 레거시 코드들이 점점 쌓여만간다.
그렇다면 프로젝트 내에서 레거시 코드들이 많아진다면 겪을 문제점은 무엇이 있을까?

1. 해당 코드를 이해하기 어려운 문제점 발생 > 변수명, 메소드명이 명확하지 않거나 너무 복잡한 경우
2. 해당 코드에 대한 완벽한 이해가 어렵기 때문에 수정이 필요한 곳에 정확한 수정을 하기 어려움
2-1. 수정했다하더라도 이에 발생할 사이드이펙트가 어디에서 발생할지에 대한 예측도 어려움
3. 코드에 대해 이해가 어려워지다보니 해당 프로젝트에 대한 유지보수 작업을 진행하는 데에 있어 어려움

레거시 코드를 만들지 않기 위해서는 어떻게 해야하나?

1. magic number 사용을 하지 않기

if(item == 1 || item == 2) {
  Item.remove(item)
}

private let book = 1
private let pensil = 2

if(item == book || item == pensil) {
  Item.remove(item)
}

첫번째 방식의 경우 숫자 1, 2가 무엇을 의미하는지 직관적으로 알수 없지만, 아래와 같이 코드를 작성하면 직관적으로 각각이 무엇을 의미하는지 알아보기 쉽기 때문에 아래와 같은 방법을 사용하는것이 좋다.

2. 의도를 나타내는 이름을 사용하기

3. if문이 덕지덕지 붙어있는 복잡한 조건식을 피하자

외는 이 블로그를 통해 확인해보자! 참고한 블로그