정적(Static)은 '고정된'이라는 의미

정적 멤버

  • 클래스에 고정된 멤버
  • 객체를 생성하지 않고 사용할 수 있는 필드메서드
    • 필드 : 정적 필드
    • 메서드 : 정적 메서드
  • 객체가 없어도 클래스 별 메모리에 할당 됨.

정적 멤버 선언

  • 정적 필드와 정적 메서드를 선언하려면, 필드와 메서드 선언 시 Static키워드를 붙이면 된다.
    • public class 클래스 {
      	// 정적 필드
          static 타입 필드 [= 초기값];
          
          // 정적 메서드
          static 리턴타입 메서드 ( 매개변수 선언, ... ) {
          	...
          }
      }
  • 클래스 로더가 클래스(바이트코드)를 로딩해서 메서드 메모리 영역에 적재할 때, 클래스 별로 관리 된다.
    • 정적 멤버는 클래스에 고정된 멤버이기 때문.
    • 인스턴스 멤버는 객체가 생성될때마다 새로운 메모리공간(주로 Heap)에 객체별로 관리된다.
      • 각 인스턴스는 고유한 값을 가지게 된다.
    • 어떤 객체라도 "공통된" 또는 "변하지 않는" 또는 "객체마다 가지고 있을 필요가 없는" 공용 데이터는 정적 필드로 선언하는 것이 좋다.
      • ex) Circle 클래스에서 원의 넓이와 둘레를 구하는 메서드를 제공 중이다.
        • 이 때, 반지름(radius)필드 값은 원의 객체마다 다르지만 파이(π)는 모든 원 객체가 동일하다.
          • public class Circle {
            	int radius;
            	static double pi = 3.14159;
            }
        • 이 때, 원의 넓이와 둘레를 구하는 방법(메서드)는 모든 원 객체가 동일하다.
          • public class Circle {
                int radius;
                static double pi = 3.14159;
            
                static double getArea(int radius) {
                    return pi * radius * radius;
                }
            
                static double getRound(int radius) {
                    return 2 * pi * radius;
                }
            }

정적 멤버 사용

클래스.필드;
클래스.메서드( 파라미터 값, ...);

주의 사항

객체가 없어도 사용가능하기 때문에, 정적 메서드 내부에 인스턴스 필드나 인스턴스 메서드를 사용할 수 없다.

 

반응형

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] for문 vs .stream() 비교  (4) 2024.11.13
흑백배달기사 프로젝트 진행 중 PR을 통해 팀원과 코드리뷰를 남기는 상황에서 궁금증이 생겼습니다.
for문과 .stream()을 혼용해서 사용하던 중 "어떤 상황"에 "어떤 코드"를 작성하는게 적절한지 알아보는 계기가 되었습니다.


Stream API

Stream API의 도입으로 반복문의 사용 방식에 큰 변화가 생겼다. Stream은 컬렉션 데이터를 필터링, 매핑, 집계 등의 작업으로 가공하는 선언형 스타일을 지원한다. "함수형 프로그래밍" 개념을 바탕으로 간결하고 가독성 높은 코드 작성이 가능해졌다.


for문

  • 직접적인 반복 제어
    • continue, break와 같은 반복문 제어를 자유롭게 사용할 수 있다.
      특정 조건에 따른 반복을 더 쉽게 제어하는 상황에서 용이
  • 단순한 반복 작업
    • 데이터가 적거나 연산이 단순할 경우 성능상 유리
    • 오버헤드로 인한 손해가 병렬처리로 얻는 이점보다 크기에 데이터가 적을 때 적합
  • 예외처리
    • try-catch 블록을 반복문 내 간편히 적용할 수 있어
      예외 상황에 유연한 대처가 필요할 때 적합

.stream()

  • 병렬처리
    • .parallelStream()을 활용해 멀티코어 CPU에서 병렬처리를 쉽게 구현할 수 있어
      대용량 데이터에 대한 처리 성능을 높일 수 있기다.
  • 코드 간결성
    • filter(), map(), collect() 등의 메서드 체이닝하여 코드가 더 직관적이고 가독성이 높아진다.
  • 함수형 프로그래밍 스타일
    • 데이터 가공과 처리 방식을 더 함수형 스타일로 구성할 수 있어, 복잡한 작업을 단순화할 수 있다.

 

정리

  • 데이터가 크고 복잡한 변화이 필요 => steam()
    • 코드의 간결함과 성능을 얻기 위해
  • 직접적인 흐름제어가 필요한 경우 => for문

 

반응형

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] 정적 멤버와 Static  (0) 2024.11.22

+ Recent posts