[TypeScript] 자료 구조로 담아내기. #3 - 배열(with. 경계 검사)

1 min read

이번 편은 이전 편으로부터 이어집니다.
배열을 다룰 때 가장 중요한 것은 유효한 메모리 경계를 검사하는 일입니다. 경계 검사를 수행하지 않아 유효하지 않은 위치에서 연산을 수행하게 되면 위험한 결과를 초래할 수 있기 때문입니다. JavaScript와 같은 고수준 언어에서는 인연이 없는 이야기로 들릴 수도 있지만 조금만 알아봅시다.
경계 검사
편의상 배열 연산에 사용되는 인덱스는 모두 정수로 상정합니다.
function checkBounds(l: number, r: number, i: number): void {
if(i >= l && i <= r) { return; }
throw new RangeError("...");
}
별도의 함수로 작성하는 것이 민망할 정도로 매우 간단한 함수입니다. 이를 사전에 호출하는 것만으로도 위험을 미연에 방지할 수 있습니다.
적용
class BasicArrayImpl<T> implements BasicArray<T> {
private slots: T[] = [];
get(index: number): T {
checkBounds(0, this.slots.length - 1, index);
return this.slots[index];
}
set(index: number, element: T): void {
checkBounds(0, this.slots.length - 1, index);
this.slots[index] = element;
}
// ...
}
get
과 set
에 대해서 간단히 적용해 보았습니다. 이제 우리의 코드는 위협으로부터 안전합니다!
내용은 다음 편에서 이어집니다. 읽어주셔서 감사합니다!
묻고 답하기
개인적인 판단에 의해 적절하다고 여겨지는 경우, 모두가 볼 수 있도록 이곳에 문답이 추가됩니다. 그렇지 않더라도 질문에 대한 답변은 별도로 이루어집니다.
0
Subscribe to my newsletter
Read articles from 고라니드로 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
