본문 바로가기
개발 일지/개발 공부

Static 장점 제대로 살리기(feat. 프로그래밍 패러다임은 어우러져야 한다)

by osul_world 2022. 11. 22.
728x90

그동안 메모리를 차지한다는 이유로 Static 키워드를 활용하는 것을 두려워 했었습니다

 

하지만 필요한 경우 Static을 사용하지 않는다면 오히려 비효율이 발생한다는 것을 알게 되면서,

 

그동안 Static의 장점을 살리지 못했다는 반성을 하게 되었습니다

 

때문에, 이번 기회에 Static에 대해 정리해 보고자 합니다

 

목차

  1. Static 장단점 및 특징
  2. 언제 사용할까?
  3. 프로그래밍 패러다임은 어우러져야 한다

 

Static의 장단점 및 특징

Static의 특징

  • Static 은 JVM이 시작될때 메모리에 올라가 프로그램이 종료될 때까지 사라지지 않는다
  • 인스턴스를 생성하지 않아도 클래스의 메서드와 필드에 접근을 가능하게 한다
  • 모든 인스턴스에서 공유된다

 

Static의 장점

  • 반복적으로 생성자를 호출할 필요가 없어 매번 인스턴스를 생성하며 낭비되는 메모리를 줄일 수 있다
  • 실행 시점에 이미 메모리에 올라가 있음으로 빠른 호출 속도를 가진다

 

Static의 단점

  • 메모리에서 사라지지 않기 때문에, 많은 Static을 사용하게 되면 퍼포먼스에 악영향을 주게 된다.
  • Static은 Interface를 구현할 수 없어 다형성을 적용할 수 없다
  • 상태를 가지지 않는 메서드 집합이라 객체지향에 반하는 개념이다

 

언제 사용할까?

Static은 반복적으로 재사용되며 수정이 적고 상태를 유지하지 않는 유틸 같은 모듈에 활용되면 효과적입니다

하지만, 객체지향에 어긋난다는 의견도 다수 보였습니다

 

이에 대한 제 생각은 ‘적절한 Static의 활용은 시스템 품질을 올려준다’ 입니다

 

‘지향’ 이라는 말은 ‘반드시 따라야한다’가 아니듯, 자바에서도 함수형 프로그래밍을 도입 하는 등

 

서로 다른 패러다임들이 하나로 어우러져 서로의 장단점을 살리고 있습니다

 

 

프로그래밍 패러다임은 어우러져야 한다

프로그래밍 패러다임의 종류는 아래와 같습니다. 다만, 하나의 패러다임을 맹목적으로 사용하기 보다, 파이프라인 로직은 절차지향 거래 관련 로직은 함수형 등 다양하게 버무려서 활용하는게 옳습니다.

 

객체지향 프로그래밍이 객체간 메세지와 협력 관계의 정의로 이루어졌다면, 함수형 프로그래밍은 단순히 상태를 유지하지 않는 함수들의 조합으로 이루어져 있습니다

 

  • 함수형 프로그래밍
    • 객체 지향과 달리 전역 변수나 공유 데이터를 사용하지 않고, 함수의 출력이 입력에만 의존하는 형태의 순수 함수로만 이루어진 프로그래밍 패러다임
    • 상태를 유지하지 않고 재사용성이 극대화 되고, 불변성을 기반함으로 데이터 상태를 파악하기 용이

 

  • 객체지향형 프로그래밍
    • 데이터를 객체로 취급하여 객체 내부에 필요한 메서드를 활용하는 프로그래밍 패러다임

 

객체지향형은 데이터의 상태에 의존적인 코드를 짜기 쉽고, 상태 관리가 힘들다는 위험이 있습니다

하지만 함수형 프로그래밍을 적절히 도입하면 위와 같은 위험을 최소화하고,

 

함께 어우러져 더 유연하고, 유지 가능하고, 테스트 가능하면서, 단순하고 완성도 높은 시스템을 만들 수 있습니다.

 

 

Reference

https://mangsby.com/blog/programming/fp-vs-oop/

https://velog.io/@huurray/객체지향-프로그래밍과-함수형-프로그래밍

https://tecoble.techcourse.co.kr/post/2020-07-16-static-method/

https://wikidocs.net/228

https://tecoble.techcourse.co.kr/post/2021-09-30-java8-functional-programming/

https://warpgate3.tistory.com/entry/자바코드로-보는-함수형-프로그래밍-Functional-Programming-in-Java

728x90