인프런 커뮤니티 질문&답변

wnsqud70님의 프로필 이미지

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

사고의 depth 줄이기

static

24.09.18 14:46 작성

·

57

0

안녕하세요 강사님

그 매직넘버와, 매직스트링 강의와 이 강의를 들으면서 하나 느낀점이 있는데 상수로서 정리를하여 얻는 이득은 있으나 그만큼 static이 많아져서 메모리를 더 먹거나 다른 단점들이 존재하는것 같은점에 대해서는 어떻게 생각하시나요?? 

그 단점들을 포기하면서도 얻는 이득이 많아서 이렇게 하시는편을 더 지향하시는지 궁금합니다

감사합니다

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

2024. 09. 18. 17:47

안녕하세요, wnsqud70 님!

상수를 추출하면서 static 키워드 때문에 생기게 되는 단점은 사실 거의 없다고 생각하는데요.
메모리 이야기를 주셔서, 제가 다른 질문 답변에 남긴 내용을 참고해보시면 좋을 것 같아요.

감사합니다 🙂

wnsqud70님의 프로필 이미지
wnsqud70
질문자

2024. 09. 22. 13:31

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

2024. 09. 18. 14:51

안녕하세요, 인프런 AI 인턴입니다. wnsqud70님,

정적(static) 필드와 메서드를 사용하는 것은 코드를 간결하고 명확하게 만드는 장점이 있지만, 말씀하신 것처럼 몇 가지 단점도 있을 수 있습니다. 이에 대해 자세히 설명해드리겠습니다.

주요 장점:

  1. 가독성 및 유지보수성: 코드가 더 명확해지며, 어디서나 접근할 수 있는 상수는 반복적으로 쓰는 값들을 한 곳에 모아 관리할 수 있게 합니다. 이는 코드의 변경 시 한 곳에서만 수정하면 되어 효율적입니다.

  2. 메모리 관리: 상수로 선언된 값들은 클래스 로딩 시 한 번만 메모리에 할당되기 때문에, 동일한 값을 여러 번 복사하지 않고도 사용할 수 있습니다.

주요 단점:

  1. 메모리 사용: 모든 static 필드는 클래스가 메모리에서 내려가지 않는 한 메모리에 계속 남아 있으므로, 너무 많은 static 필드 사용은 메모리 사용량 증가의 원인이 될 수 있습니다.

  2. 동시성 문제: static 필드는 모든 스레드가 공유하기 때문에 멀티스레드 환경에서 동기화 문제가 발생할 수 있습니다. 이는 상태를 가지는 static 필드에서 두드러집니다.

  3. GC(가비지 컬렉션)에 의한 관리 어려움: static 필드는 GC가 관리하지 않기 때문에 메모리 누수의 원인이 될 수 있습니다.

상수 사용 권장 이유:

  • 상수를 통한 코딩 표준화: 상수를 사용하면 매직 넘버 또는 매직 스트링의 의미를 명확히 할 수 있어서 코드의 가독성 및 유지보수성이 크게 향상됩니다.
  • 재사용성: 동일한 값을 여러 곳에서 사용해야 하는 경우 상수로 정의해 두면 유지보수가 편리합니다.

타협점:

상수 사용으로 인해 발생할 수 있는 단점을 최소화하려면, 필요한 경우와 그렇지 않은 경우를 잘 구분하여 사용하는 것이 중요합니다. 예를 들어, 자주 사용되지 않는 값은 지역 변수로, 자주 사용되며 여러 클래스에서 공통으로 사용되는 값은 상수로 두는 것이 적절합니다.

아래 관련 강의에서 더 자세한 답변을 참고하실 수 있습니다:
- static 사용 기준이 궁금합니다
- 정적 팩터리 메서드 사용 기준

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

wnsqud70님의 프로필 이미지

작성한 질문수

질문하기