inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

사고의 depth 줄이기

static

186

wnsqud70

작성한 질문수 58

1

안녕하세요 강사님

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

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

감사합니다

객체지향 리팩토링 클린코드-기획전

답변 2

0

박우빈

안녕하세요, wnsqud70 님!

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

감사합니다 🙂

0

wnsqud70

감사합니다!

0

인프런 AI 인턴

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

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

주요 장점:

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

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

주요 단점:

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

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

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

상수 사용 권장 이유:

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

타협점:

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

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

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

[강의 질문] 메서드 선언부

0

90

1

[강의 질문] 메서드와 추상화

0

61

2

DIP 개념에 대한 질문입니다.

0

64

1

만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민

0

86

2

DIP 설명 후반부에 IOC에 대한 질문 드립니다.

0

80

2

안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!

0

71

1

안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.

1

64

2

자바 record 사용에 대해서 질문 드립니다!

0

128

2

강의 내용 정리 및 자료 제작 툴 문의 드립니다.

0

136

2

사용할 변수 가깝게 선언하기 질문

0

93

1

오버 엔지니어링

0

151

2

학습용 java/spring 오픈소스 추천

1

368

2

중복된 메서드 줄이는 방법

0

185

2

MarketPlace에서 Sonarlint 검색이 안됩니다.

0

417

3

isLandMineCell() 메서드 질문

0

209

1

Cell[][]BOARD 매개변수받기

0

153

2

ConsoleInputHandler에서 왜 final붙여야 하는지

0

194

1

정적 생성자 메서드 of, from

0

266

2

Getter관해서

0

148

3

이름 바꾸기

0

129

2

stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??

0

164

2

현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.

0

209

2

null을 가질 수 있는 값을 인자로 넘겨야 하는 경우

0

253

3

리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..

0

255

2