ABAP DUMP ERROR 24시

static, final, 필드, 메소드, 인스턴스 의미 정리 본문

[WEB]Back-end/Java

static, final, 필드, 메소드, 인스턴스 의미 정리

이운형 2022. 1. 26. 16:56
반응형

정리


Q. static이 뭐야?

새로운 memory를 할당하지 않고 값을 공유해서 사용하겠다.

객체 생성 없이 사용할 수 있는 필드와 메소드를 원할때 사용이 된다.

 

Q. static은 객체 생성 없이 어떻게 원할때 마다 사용이 가능해?

static을 사용하면 프로그램이 시작하고 종료될때 까지 작동하는 static 메모리에 할당이 된다.

static 메모리에 할당이 되기 때문에 초기화 과정이 필요가 없고, static이 선언된 메서드와 변수에 접근이 가능해!

 

다음과 같이 2개의 static 관련 Test를 만들어 보았다.

package javaSpring.Spring.MYTEST;

public class StaticExample {

    static int a = 3;
    static int b = 4;

    static int multi(int a, int b){
        return a*b;
    }
}
package javaSpring.Spring.MYTEST;

public class StaticExample_Test {

    public static void main(String[] args){
        int a = StaticExample.a;
        int b = StaticExample.b;
        int result = StaticExample.multi(a, b);
        System.out.println("result = " + result);
    }

}

 

코드를 보면 StaticExample에 만들어진 변수를

다른 class인  StaticExample는 변수 생성을 안하고 가져다 사용할수 있다!

//StaticExample staticExample = new StaticExample() 과 같은 과정을 안하고도 사용이 가능해!

 

즉, static은 공유해서 필드값을 사용하거나, 메소드를 선언할때 사용될때 이용!

 

Q. 필드는 뭐고 메소드는 뭐야?

필드 =  객체의 정보

메소드 =  객체의 기능

/* 필드 */
String name; // 이름
int price; // 가격
String category; // 종류

/* 메소드 */
void call(String Phone) {

 

Q. 정적은 뭐고 인스턴스는 뭐야?

정적 필드 = 자료형 필드 앖에 Static 사용한것.

정적 메소드 = 메소드 앞에 Static을 선언한것.

인스턴스 필드 = 클래스의 인스턴스를 직접 생성해야 접근할수 있는 필드.

인스턴스 메소드 =  클래스의 인스턴스를 직접 생성해야 호출할수 있는 메소드.

 

쉽고 가볍게 이해하기 위해

정적Static 을 사용한것

인스턴스는 StaticExample staticExample = new StaticExample() 와 같이 따로 불러오고 선언해서 사용하는것.

 

 

Q.Final이 뭐야?

1. 상수에서의 측면

값을 재할당 하지 않겠다 라고 선언.

final int a = 3;
a = 10 // 에러발생

2. 메서드에서의 측면

오버라이딩이 금지된다.

    class SuperClass{
        public final void work(){
            
        }
    }
    
    public class Sub extends SuperClass{
        // 위에 정의되어 SuperClass에 정의되어있는 work 메소드를 사용할수 없다.
    }

}

 

3. 클래스에서의 측면

상속이 불가능 하다.

final Class SuperClass{}


class SubClass extends SuperClass{
    ///에러발생
}

 

final 키워드는 상수, 메소드, 클래스를 정의한 후 변경하지 못하게 할때 사용된다.

 

/* 2021-01-27 추가 */

final을 사용하면 초기에 변수값을 설정해주거나 생성자를 통해서만 값을 변경시킬수 있다.

private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;

다음과 같이 설정하면

public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
    this.memberRepository = memberRepository;
    this.discountPolicy = discountPolicy;
}

 

 

 

 

 

 

반응형
Comments