코딩테스트/자료구조

[JAVA 기초] 변수 & 상수, 복사호출 & 참조호출, 상속

haenni 2024. 7. 19. 10:16

👩‍💻  JAVA 기초 - 변수 & 상수, 복사호출 & 참조호출, 상속

*이 글은 글쓴이가 몰랐거나 헷갈렸던 부분만 따로 정리한 포스팅 입니다.*

(아는 지식들은 정리하지않았음)


 

 

📌 JAVA 기초 문법

✏️ 변수와 상수에 대해 알아보자

 

1️⃣변수

: 변할 수 있는 값

타입 타입 명   바이트
정수 타입 byte   1 byte
정수 타입 short   2 byte
정수 타입 int   4 byte
정수 타입 long   8 byte
실수 타입 float   4 byte
실수 타입 double   8 byte
논리 타입 boolean   1비트 혹은
ture, flase
문자 타입 char   2 byte

 

2️⃣상수

:고정 되어 있는 값

 

상수 표현 방법 "final"

final double PI = 3.141592
final int NUM = 1000

 

 

📌 복사호출(call by value) & 참조호출(call by reference)

✏️ 복사호출이란?

:복사 호출에 대해 알아보자

우선 그림 (a)와 (b)를 봐보자.
twofold(x)를 호출할 때, x의 값을 int a에 복사하는 것 이기 떄문에 a에 어떠한 값을 대입해도 x의 값은 변하지않는다.

b의 그림에서 x라는 변수에 "5"라는 값을 저장한 뒤, twofold를 호출하며 인자 값으로 x를 넣어주었다.
a의 그림의 파라미터 int a 에 5의 값이 들어가게 되고, 2 * 5 라는 연산을 하게되어 a의 변수에는 10이라는 값이 들어가게 되지만 이후 값을 반환해주는 동작이 없다. 이러면 x의 값은 변할까 ? 정답은 "변하지않는다"이다.

이어서 그림 (c)와 (d)를 봐보자.
똑같이 twofold(x)를 호출하여 인자로 x의 값인 5를 복사하여 int a에 집어넣었을 때, twofold 메서드 내에서 
a = 2* a 라는 식으로 a에 똑같이 10을 대입해주었고, 이후 10이라는 값이 담긴 a를 return 해주었다.
반환 값으로 10을 주었으니 그림 (d)의 x에 값을 대입하는 "x ="으로 인해서 x = 10이 되는 것과 같다.

 

 

 

 

 

✏️ 참조호출이란?

:참조 호출에 대해 알아보자

 

위의 복사 호출은 말 그대로 "복사"를 하는 것 처럼, 참조호출 또한 말 그대로 "참조"를 하는 것 이다.

int[] A = new int[10]; 으로 인해 사이즈가 10인 이름 A 배열이 생성되었다.
배열 A의 index 5의 값에 "7"을 대입시키고 int라는 변수 k에 5를 대입하여 sampleAccess의 인자로 각각 넣어주었다.

이때 인자 배열 A는 sampleAccess 메서드의 파라미터에서 int B[]라는 배열에 "참조"되는 것 이다.
변수와 다르게 배열은 메모리 상의 위치인 "주소"이라는 게 존재하는데, B배열은 A배열을 똑같이 복사한 배열을 만드는 것이 아닌, 주소 값을 받게되어 A배열과 똑같은 주소를 가르키게 된다. 때문에 B[n] = 8 라고 대입할 시 바로 A배열의 n번째 index의 값이 8로 변하게 된다.



 

📌 상속(inheritance)

✏️ 상속이란?

:기존 클래스의 변수와 메소드를 물려 받아 새로운 클래스를 구성하는 것

 

 

✏️ super()

:상속을 하는 클래스를 Super클래스라고하고, 상속을 받는 클래스를 SubClass라고 한다.

super()를 호출함으로써 B의(Super클래스의) 생성자를 불러오는 것 이다.

 

 

✏️ super.A()

public class A extends B{

private boolean state;
//생성자
    public A(){
    	super();
        state = false;
    }
    
        public void get(int i){
    	return i++;
    }
    
    public void top(){
    	return super.get(1);
    }
}
top메서드는 get메서드를 호출하고있는데 앞에 super.이 붙어있다. 이건 무엇을 의미할까?
subClass에도 get이라는 메서드가 존재하지만, 앞에 super.이 붙게되면 자신이 상속받은 클래스. 즉 B의 클래스에 있는 get 메서드를 호출하는 것 이다.