2023dirt 개발자중공업

https://velog.io/@jhaneul

자바를 처음 공부할 때 헷갈렸던 것 중에 하나가 있는데

바로 변수를 지칭하는 용어가 너무 많아 헷갈렸었다.

 

멤버변수 지역변수 인스턴스변수 클래스변수 참조변수...등등

어떤게 어떤건지 왜이리 지칭하는 수식어가 많은지 생각을 했었는데 이를 한 곳에서 정리해주는 곳을 찾고 싶었으나 결국 천천히 공부하면서 배웠다.

 

 

기본형변수

참조변수

멤버변수

클래스변수

인스턴스변수

지역변수

매개변수

 

내가 아는 변수의 종류들이다. 무려 7가지가 있는데 나누는 기준이 다르다 크게 두가지 기준이 있다.

 

1. data type 에 따른 분류

 

기본형변수 참조변수로 나뉜다.

 

기본형변수는 자료의 실제값을 저장한다.

 

8가지 종류의 타입이 있다.

논리형 : boolean 

문자형 : char                      

정수형 : byte            

 short

 int

 long

실수형 : float

 double

 

참조변수는 값이 저장되어 있는 주소값을 값으로 갖는다.

 

8가지 기본형 변수를 제외한 나머지 타입이다.

대표적으로 String이 있고 사용자가 얼마든지 새로운 클래스를 만들어 낼 수 있기때문에 무한하다.

 

 

2. 선언 위치에 따른 분류

 

크게 멤버변수 지역변수로 나뉘며

 

멤버변수 클래스변수 인스턴스변수를 통틀어서 부르는 용어이다.

 

클래스영역에 선언된 변수를 멤버변수라 하며 그중 앞에 static 이붙은 변수를 클래스 변수라고 한다.

 

인스턴스변수

클래스 영역에 선언되고

인스턴스 생성시 만들어진다.

각각의 인스턴스마다 다른 값을 가질 수 있다.

그러므로 인스턴스 생성이 필수이며 각 인스턴스마다 다른 값을 가져야 할 때 사용된다

 

 

클래스변수

인스턴스변수 앞에 static 을 붙이기만 하면 된다.

인스턴스변수가 각각의 인스턴스마다 다른값을 가질 수 있는 거와 달리 

값을 공유하는 변수이다.

클래스 로딩시 생성되며 

클래스이름.변수이름 이렇게 인스턴스 생성 필요없이 바로 쓸 수 있다.

 

 

지역변수

메소드 내에 선언되며 메소드 호출시 생성되고 메소드가 종료되면 사라진다.

 

 

매개변수

흔히 파라미터라고 불린다. 메소드에서 입력값을 받을 때가 있는데 그때 사용되는 변수를 매개변수라고 한다.

매개변수도 매소드 내에 선언된 것으로 간주되므로 지역변수이다.

인자값은 호출시 메소드입력부의 넣는 값이며 이값은 매개변수에 복사되어 대입된다.

 

 

 

 

예제를 보고 직접 구분해보자!

 

 
public class Variable {
    int a;
    static String b;
    void m(int c){
        int d=c;
    }
    public static void main(String args[]) {
        int e=0;
        Variable v = new Variable();
        v.m(e);
    }
}

 

 

2번줄     a 기본형변수이면서 멤버변수 인스턴스변수

3번줄     b 참조변수이면서 멤버변수 클래스변수

4번줄     c 기본형변수이면서 매개변수 이면서 지역변수

5번줄     d 기본형변수이면서 지역변수

7번줄     args 참조변수이면서 매개변수 이면서 지역변수

8번줄     e는 기본형변수이면서 지역변수

9번줄     v는 참조변수이면서 지역변수

10번줄   e는 인자값으로 값0이 매개변수에 복사되어 넣어진다.

 
 

결론: 객체생성을 하지 않아도 된다는 의도를 명확히 하기위해서 + 의도치않은 메모리 낭비를 막기위해

 

 

추상클래스는 인스턴스가 생성되지않는지 생각해보았습니다.

 


 

 

💡 추상클래스의 인스턴스화

모두가 알 듯이 인스턴스화를 할 수 없다.

추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다.

추상 클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 이용된다. 

 

인스턴스화를 위한 유일한 방법은 자식클래스를 생성하여 super()로 부모생성자를 호출하는 방법이 있다.

부모생성자가 매개변수가 있다면 매개변수도 같이...

 

 

 

 


 

왜 추상클래스를 인스턴스화 시키지 못할까?

 

 

📌 추상클래스는 보통 동작이 정의되지않은 추상 메소드를 포함한 클래스를 말한다.

 

 

추상클래스를 사용하면, 추상클래스를 상속받는 자식 클래스들은 반드시 추상메소드를 재정의해야하고, 같은 이름을 가진, 다른동작을하는 메소드를 얻을 수 있는 객체제지향의 다형성 특징을 가지는 클래스이다.

 


본래 추상클래스는, 이처럼 동작이 정의되지않은 추상 메소드를 포함하고 있기 때문에 인스턴스를 생성할 수 없다.

추상클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 자식 클래스의 인스턴스를 생성할 수 있게 막아놓았다고 한다.

 


추상 메소드의 사용 목적

자바에서 추상 메소드를 선언하여 사용하는 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함입니다.

 

 

abstract 키워드 자체에 '해당 클래스는 객체화 할 수 없음'의 의도가 명확히 드러나고 (객체화 할 수 없음에 대한) 구현이 포함되기 때문입니다.
private 생성자를 쓰더라도 reflection 기술을 사용하면 객체화 할 수 있게 된다.

 

 

 

'😡각종문제들' 카테고리의 다른 글

자바 변수가 헷갈린다.  (0) 2023.04.29
04.25 HTTP란 무엇인가?  (0) 2023.04.26
04.23. public static void main(String[] args)은 무엇인가?  (0) 2023.04.23
Scanner  (1) 2023.04.13