베나코드
걷고 나니 길
베나코드
전체 방문자
오늘
어제
  • 분류 전체보기 (24)
    • MicroOffice (2)
      • Excel (2)
      • PowerPoint (0)
    • Programming (9)
      • Java (5)
      • SpringFramework (0)
      • 자바스크립트 (3)
      • TypeScript (0)
      • Node.js (0)
      • Mybatis (1)
      • Vue (0)
    • Test (0)
      • Junit (0)
      • Mockito (0)
    • IT용어 (2)
      • 개발론 (0)
      • 디자인 (0)
      • 다양한 (2)
    • Data Structure (2)
    • Algorithm (0)
      • LeetCode (0)
      • Backjoon (0)
      • programmers (0)
      • 시험문제 (0)
    • Regular Expression (0)
    • Azure (0)
    • DB(DATABASE) (1)
      • ERD (0)
      • Oracle DB (1)
      • MySQL (0)
    • Tiny Bug (0)
    • 영어공부 (7)
      • TOEIC (7)
    • Git (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • @ParameterizedTest
  • Azure기본사항
  • java
  • FUNCITON
  • azure
  • az-900
  • Microsoft Lean
  • TOEIC
  • js
  • copyProperties
  • unchaged
  • junit5
  • excel
  • @Nested
  • beanutils
  • 함수
  • splide
  • 방어코딩
  • santa
  • 방어적프로그래밍
  • @AfterAll
  • JRM
  • 오류출력변경
  • @BeforeAll
  • 사용
  • 개발속도
  • @DisplayName
  • ms
  • Tippy
  • 빈문자열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
베나코드

걷고 나니 길

방어적 프로그래밍(Defensive programming), 방어 코딩(defensive coding)
IT용어/다양한

방어적 프로그래밍(Defensive programming), 방어 코딩(defensive coding)

2022. 8. 11. 00:49

JAVA 프로그래밍을 할 때, 제일 자주 보는 Exception이 NullPointException이지 않을까?

Exception 발생 코드를 보면 또 이렇게 생각하곤 한다.

"아..? 이런 걸 놓쳤다고?"

 

 

❔ 방어적 프로그래밍

방어적 프로그래밍(Defensive programming)은 예상치 못한 입력에도 한 소프트웨어가 계속적 기능 수행을 보장할 수 있도록 고안된 방어적 설계의 한 형태이다. - 위키백과

방어적 프로그래밍은 방어 코딩이라고도 하며,

일반적으로 개별 메서드에 대한 입력을 확인하여 원하는 값(=정답)이 나올 수 있도록 프로그래밍한다.

 

❔ 그러니까 이게 무슨 말이지?

우리는 프로그래밍을 할 때, 쉽게 오류에 빠진다.

 

1. 발생하지 않을 일라고 생각하며 넘어가거나

     ex: 사용자가 이름 입력하는 곳에 길이가 만단 위 넘는 문자열을 입력하는 경우

2. 예외 상황을 판단하여 테스트를 거쳤기 때문에 완벽하다고 확증 편향(confirmation bias)에 빠진다거나

     ex: 버튼을 여러 번 클릭하여 발생하는 중복 주문에 대해 테스트를 했지만, 주문 완료 후 뒤로가기로 중복 주문이 발생 가능하는 경우

등등 많은 경우가 있다.

 

✔ 프로그래머가 문제를 예상하고 이를 처리하는 코드를 작성하는 것이 바로 방어적 프로그래밍이다.

    ex: 입력문자열에 제한, 특정 페이지에서 뒤로가기 기능 막기, null 값에 대해 유효성 확인

 

❗ 방어적 프로그래밍을 위해, 생각해 볼만한 문제들

1. 외부 소스나 매개변수로 받는 값

-. 올바른 데이터 범위 내에 존재하는지, 올바른 데이터 유형인지 확인한다.

-. 날짜값은 특정 날짜 범위 내에 존재하는지, 입력받은 데이터가 null이 아니면서 유형이 문자열인지 확인 등

 

2. 공유 메모리 또는 스레드

-. 의도하지 않게 덮어 쓰이거나 데드락 발생하지 않도록 한다.

 

3. 변수 활용 : 간섭 및 범위

-. 전역 변수와 지역 변수 간의 간섭, 범위 등에 대해 최소 단위 등을 신경 쓴다.

 

4. 개발자 규칙

-. 일찍 실패하고 자주 실패하자

   : 오류 발생 시점과 오류 인지 시점이 시공간적으로 멀어질수록 문제 해결을 위해 더 많은 시간과 노력이 필요하다.

-. 버그를 가정문과 테스트로 변환하자

   : 하나의 실수가 근처 또는 다른 로직 아니면 비슷한 코드 변경 시 동일하게 발생할 수 있다.

     이전 문제가 다시 발생하지 않도록 가정문과 테스트로 작성하여 방지하고

     유지보수 시(미래의 나를 포함하여) 까다로운 코드의 경우 경고를 주는데도 도움이 된다.

 

5. 테스트 주도 개발(Test-Driven Development)

-. 각자 지향하는 개발이나 처한 환경에 따라 개발 방법론이 다르겠지만,

-. 방어적 프로그래밍의 궁극적 형태 중 하나가 테스트 주도 개발이라고 생각하기 때문에

-. TDD의 개념 및 구현도 좋은 경험이 될 것이다.

 

 

 

 

 

# 참고 사이트

-. https://en.wikipedia.org/wiki/Defensive_programming

-. https://www.linkedin.com/pulse/defensive-programming-hassan-elseoudy

 

Defensive Programming

Defensive programming is the practice of anticipating problems that may arise in a software system and writing code to keep the system in a good state when such problems occur. A common way to apply defensive programming (also called defensive coding) is b

www.linkedin.com

-, http://aispiration.com/xwmooc-sc/novice/python/05-defensive.html

 

http://aispiration.com/xwmooc-sc/novice/python/05-defensive.html

방어적 프로그래밍 (Defensive Programming) 앞선 학습에서 프로그래밍의 기본적인 도구를 소개했다. 변수와 리스트, 파일 입력출력(I/O), 루프, 조건문, 그리고 함수. 아직 수행하지 않은 것은 프로그램

aispiration.com

 

'IT용어 > 다양한' 카테고리의 다른 글

[footprint] 풋프린트 뜻, 의미  (0) 2022.08.23
    'IT용어/다양한' 카테고리의 다른 글
    • [footprint] 풋프린트 뜻, 의미
    베나코드
    베나코드

    티스토리툴바