Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[item #49] 단언문(assert)의 용도 질문 #55

Open
hailey21 opened this issue Mar 5, 2023 · 1 comment
Open

[item #49] 단언문(assert)의 용도 질문 #55

hailey21 opened this issue Mar 5, 2023 · 1 comment
Assignees

Comments

@hailey21
Copy link
Member

hailey21 commented Mar 5, 2023

300p에서 단언문은 일반적인 유효성 검사와는 다르고, 실패하면 AssertionError, 런타임에 아무런 효과도 성능 저하도 없다고 하는데요,
실행할 때 명령어로 -ea 또는 -enableassertions 플래그를 실행해야만 하고 그렇지 않은 경우에는 단언문을 없는 코드로 생각하고 실행되기 때문이라고 이해했습니다.
그래서 vm 인수를 주고 실행했을 때에는 런타임에 효과도 있고 성능에도 영향을 미칠 수 있다고 생각이 되는데,
그렇다면 단언문의 용도는 무엇일까요?
그냥 개발자들에게 보여주기 위한 명세에 가까운건지,
제품의 개발이 어느정도 완료되기 전까지 제약을 주는 용도인지 궁금합니다..

@daeho-ro
Copy link
Member

daeho-ro commented Mar 5, 2023

마지막 문장이 목적에 가장 부합하는 것으로 보입니다. 런타임에 Assertion은 동작하지 않도록 하여 퍼포먼스를 유지하고, 개발 당시에 메서드의 요소들에 대한 명세를 제공함으로써 메서드가 잘못된 인수를 받지 않도록 제한하고 이를 빠르게 찾기 위해서 단언문이 도입된 것으로 보입니다. 물론 운영 환경에서의 퍼포먼스가 감당 가능하다면 말씀하신 것처럼 일부 퍼포먼스를 희생해서 -ea 플래그를 통해 Assertion을 활성화 할 수 있기도 하겠죠. 저도 계속 보면서 드는 생각이 Validation 개념과는 살짝 다른 것처럼 느껴지기는 합니다.

다음은 chatGPT의 답변입니다.

Java Assertion의 목적은 프로그램의 특정 지점에서 프로그램 상태에 대한 가정을 지정함으로써 개발자가 더 견고한 코드를 작성하는 것을 돕는 것입니다.

Assertion은 특정 조건이 참인지를 확인하고, 참이 아니면 AssertionError가 throw됩니다. 이것은 Assertion이 실패하면 코드에 버그가 있음을 나타내며, 이것을 수정해야한다는 것을 의미합니다.

기본적으로 Assertion은 런타임에서 작동하지 않지만, 자바 가상 머신을 실행할 때 "-ea" 플래그를 사용하여 활성화할 수 있습니다. 이는 코드에서 Assertion을 사용하면 런타임에서 확인되며, 실패하면 AssertionError가 throw된다는 것을 의미합니다.

Assertion은 일반적으로 개발 및 테스트 중에 버그를 조기에 찾기 위해 사용되지만, 프로덕션 코드에서도 프로그램이 올바르게 실행되고 있는지 확인하는 방법으로 유용할 수 있습니다. 전반적으로 Assertion의 사용은 자바 코드의 품질과 신뢰성을 향상시키는 데 도움이 될 수 있습니다.

@daeho-ro daeho-ro self-assigned this Mar 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants