Adventure Time - Lady Rainicorn [Java] - 클래스 메서드와 인스턴스 메서드
본문 바로가기
💻공부/Java ☕️

[Java] - 클래스 메서드와 인스턴스 메서드

by 강켄트 2023. 2. 1.

☺️ 남궁성님의 ' 자바의 정석'을 공부하고 정리한 글입니다.

 

 

클래스 메서드(static 메서드) 인스턴스 메서드 
메서드 앞에 static이 붙어있다. 메서드 앞에 static 붙어있지 않다. 
객체 생성하지 않고도 호출 가능  반드시 객체 생성해야만 호출 가능 

💡클래스 : 데이터(변수)와 데이터에 관련된 메서드 집합 

 

 

🤔 클래스를 정의할 때, 어느 경우 static을 사용해서 클래스 메서드로 정의할까...?

메서드 중에서 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드를 클래스 메서드로 정의한다. 

인스턴스 변수를 사용하지 않는다고 해서 반드시 클래스 메서드로 정의해야 하는 건 아니지만, 이렇게 하는 것이 일반적이다.

(인스턴스 변수는 메서드 작업 시 인스턴스 변수를 필요로 하는 메서드이다.)

 

💡멤버 변수 : 클래스 영역에 선언된 변수(클래스 변수, 인스턴스 변수를 모두 통칭)

💡클래스 변수 : 멤버 변수 중 static이 붙은 변수 

💡인스턴스 변수 : 멤버 변수 중 static이 붙어있지 않은 변수 

 

 

📄 정리 

  • 클래스 설계 시, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것이면 static을 붙이자. 
  • 클래스 변수는 인스턴스를 생성하지 않아도 사용 가능하다.
    • static이 붙으면 클래스가 메모리에 올라갈 때 자동 생성되기 때문 
  • 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
    • 클래스 메서드는 인스턴스 생성 없이 호출이 가능한데 호출 시 언제나 인스턴스가 존재하지 않을 수도 있기 때문 
  • 인스턴스 변수나 인스턴스 메서드에서 static이 붙은 멤버들을 사용하는 것은 언제나 가능하다. 
  • 메서드 내에서 인스턴스 변수를 사용하지 않으면, static을 고려하자. 
    • 메서드 호출시간이 짧아져서 성능이 향상된다. 
    • 인스턴스 메서드는 실행 시 해당 메서드를 찾는 과정이 추가적으로 필요해서 시간이 더 걸린다. 

 

예시)

 

위 코드를 보면 인스턴스 메서드 add(), subtract(), multiply(), divide()는 인스턴스 변수 a, b가 있어야 작업이 가능하다. 

반면

add(long a, long b), subtract(long a, long b), multiply(long a, long b), divide(long a, long b)는 매개변수만으로 작업을  수행한다. -> 인스턴스 변수가 필요 없는 상황 -> 클래스 메서드(static 메서드)로 선언

클래스 메서드로 선언했기 때문에 객체없이 바로 MyMath2.xxx으로 호출이 가능했다. 

 

 

ps. 몇번의 면접 경험을 거치면서 내가 알고 있던 개념이 정확하지 않다는 걸 많이 느꼈고, 무지성이 아니라 

하나를 작성하더라도 제대로 이해하면서 작성하는 게 정말 중요하구나를 많이 느낀다.

어떤 경우 인스턴스 메서드나 클래스 메서드로 선언해야 하는지 그리고 그 차이를 이해해야겠다. 

 

'💻공부 > Java ☕️' 카테고리의 다른 글

[Java] - this(), this  (0) 2023.02.01
[Java] - 클래스 멤버와 인스턴스 멤버  (0) 2023.02.01
[Java] - 컬렉션 프레임워크  (0) 2023.01.19
[Java] - Set과 HashSet  (0) 2023.01.17
[Java] - 개선된 for문  (0) 2023.01.15

댓글