CheerUp_Cheers

Static, 싱글턴, 내포 클래스 본문

인프런/개체지향 프로그래밍 및 설계 (Java)

Static, 싱글턴, 내포 클래스

meorimori 2020. 11. 26. 19:06

#모든것이 개체 속에 있어서 불편함

- 단순한 계산도 개체로 만들어서 해야하나?

 ex) 절대값 구하기 int Math.abs(int);

   공백문자개수 구하기 : StringUtils.countSpaces(String str);

- 개체 단위가 아니라 클래스 단위에서 뭔가 하고 싶을때는?

 ex) 이 클래스에서 총 몇개의 개체가 있을까?

 

=> 정적(static)이 이런 불편함을 해결해줌(개체 범위가 아닌 클래스 범위)

 

#단순한 계산 시

#정적 메소드만있는 Math클래스는 개체를 못만들게 하면 안되요?

맞는 말임 -> 이런 경우 개체 생성을 못하게 막으면 됨.

 

- 방법 1) 생성자를 private로 막을까?

private Math() { } // private로 막고!

Math math = new Math(); // 컴파일 오류
int absValue = Math.abs(-2) // 는가능!

=> 근데 이건 꼼수라네요...

 

 

# 개체 단위가 아닌 클래스 단위

ex) 콜라공장에서 만든 총 콜라 갯수를 가져오고싶다

 => 멤버변수에 static 때려박아

 

- 출력은?

 메소드를 static으로해서 print메소드를 만들면 됨.

 -> 정적메서드에서 비정적 메소드나 비정적 멤버변수에 접근 불가.

 

#static 정리

 1) static은 딱하나 존재

 2) static이 아니면 개체에 속함

 3) 비정적 -> 정적 (가능)

 4) 정적 -> 비정적 (불가능)

 

- 장점

 1) 클래스 내부에 위치하니 이름 충돌 적음

  ex) A.printMethod(), B.printMethod()

 2) 접근 범위 제어


#로그를 왜 남겨요~?

- System.out.println()쓰면 되잖아?

 최종사용자의 콘솔에 찍어봐야 우리는 문제를 해결 불가.

 -> 최종사용자의 로그파일을 달라고해서 우리가 체킹 할수 있지

 -> 더 나아간다면 클라우드 저장소에 로그를 남기도록해서 보내달라 할 수 있지.

 


#static에 대한 비판

static은 개체 소속이 아니잖아!
순수 객체 지향 사람들 주장

 

- 결론

OO의 개념과 먼것은 사실.

그러나 OO의 개념과 멀다고 그게 잘못된 건 아님.

 

- 훌륭한 프로그래머의 자세

 OO와 절차적 개념을 언제, 어디서 써야하는지 안다

 -> 여기에는 절차, 여기에는 OO

 -> 자바의 Static은 잘한 것.

 

- 개체이면서 static과 똑같이 작동하는 OO?

 그걸 '싱글턴 패턴' 이라고 해.