차근차근 개발자 되기

Java

8일차: Java 메소드 호출/static/final - 2021.06.24

wellow 2021. 6. 24. 21:35

목차

1.     메소드 호출

2.     정적 멤버와 static

3.     final 필드와 상수

 

1. 메소드(Method)

          

1) 매개값이 배열인 메소드의 호출           ★ComputerEx 참고

 

2) 클래스 내부에서 메소드 호출(메소드 안에서 다른 메소드 호출)    CalculatorEx1 참고

- 같은 클래스 내의 메소드를 호출할 때는 메소드명()’으로 호출 가능

( ex. double sum = plus(x, y); )

 

3) 메소드 오버로딩(Overloading)                       CalculatorEx2 참고

- 한 개의 클래스 안에 같은 이름의 메소드를 여러 개 선언하는 것

- 하나의 메소드 이름으로 다양한 매개값을 받기 위해 메소드 오버로딩

- 오버로딩의 조건: 매개변수의 타입, 개수, 순서가 달라야 함

 

2. 정적 멤버와 static

 

1) 정적(static)멤버

정적 멤버: 클래스에 고정된 필드와 메소드 - 정적 필드, 정적 메소드

- 공유를 목적으로 함

- 정적 멤버는 객체를 생성하지 않고 클래스로 바로 접근해 사용

- 클래스명.필드명  /  클래스명.메소드명() (ex. Math.pi, Math.random())

ex)

      class StaticTest{

          int   a;                           // 인스턴스 멤버변수

          static  int  b;                   // 정적 멤버변수(공유영역에 저장)

       public  static  void  check(){  // 정적 메소드

       }

       public static void main(String[] args){     // 정적 멤버변수는 클래스로 접근 가능

            System.out.println(StaticTest.b);       // 클래스명.필드명;

            StaticTest.check();                        // 클래스명.메소드명();

 

2) 정적 멤버 선언

- 필드 또는 메소드 선언할 때 static 키워드 붙임

 

3) 정적 멤버 사용

- 클래스 이름과 함께 도트(.) 연산자로 접근

 

4) 정적 멤버변수 vs. 인스턴스 멤버변수              ★StaticTest01 참고

 

                 a=100               // 정적 멤버변수 (Heap영역에 저장되지 않고 공유영역에 저장됨

              (공유영역)

   s1             ------->            b=200

   s2             ------->            b=20

(Stack영역)                        (Heap영역)

 

5) 정적 메소드와 정적 블록 작성시 주의할 점       ★StaticTest2~4참고

- 객체가 없어도 실행 가능(, private 접근제어자가 있으면 접근 불가)

- 블록 내부에 인스턴스 필드나 인스턴스 메소드 사용 불가(정적 메소드 안에는 정적 필드만 올 수 있음)

- 객체 자신의 참조인 this 사용 불가

 

6) Math 클래스의 정적 필드 & 정적 메소드         ★MathEx 참고

- 객체 생성 없이 도트(.)로 접근 가능

- 필드: .E, .PI

- 메소드: .round(), .ceil(), .max(), .random()

 

7) 싱글톤(Singleton)                                       ★SingletonEx 참고

- 한 개의 클래스 안에 객체 생성을 한 번만 수행

 

3. final 필드와 상수(static final)

 

- 상수: 변하지 않는 값 변수

final멤버변수에 사용되는 경우                    ★FinalTest01 참고

      상수(값을 수정할 수 없다)

final메소드에 사용되는 경우                       ★FinalTest02 참고

      메소드 오버라이딩을 허용하지 않는다는 의미

final클래스에 사용될 경우                          ★FinalTest03 참고

      상속을 허용하지 않는다는 의미