JAVA

[JAVA] Overloading (+ 객체 생성 개념, static)

김디니 2023. 3. 9. 08:30

🚧 자바 문법으로 보는 객체 생성

 

public class Player {
    private int no;
    private String name;
    private int age;
    private String addr;
    private String deptName;

    ...
}

 

클래스는 Player에 대한 틀을 만들어준다.

 

Player [] p = new Player[3];
p[0] = new Player(10, "김예린", 28 , "현충로", "KB");

 

이때 객체는 new를 통해 생성된다.

Player에 대한 배열을 만드는 코드이다.

객체를 생성한다는 것은 Player 1에 대한 계정을 만드는 것과 같다.

이때 객체를 생성할 때 실제 값이 들어가는 것이 아닌 주소값을 할당하는 것이다.

이는 메모리 측면은 고려한 것이다.

 

static

static은 객체와 관련없이 언제나 메모리에 존재한다.

 

이 그림처럼 클래스 한켠에 static가 자리잡고 있다고 가정해보자.

static은 객체가 생성되기 전에도 존재하는데 객체 메모리가 할당되기를 기다리고 있어야 하기 때문이다.

 

이 한켠에 자리하고 있는 static은 객체가 생성되면서 계속해서 증가한다.

static은 Player1의 정보들(데이터/값)들이 담긴 곳이 어디인지 나타내는 주소를 저장하고 있다. 

즉, static에 담긴 Player1의 정보는 Player1에 대한 이름/나이/주소 등과 같은 데이터가 아닌 주소이다.

이는 메모리를 위한 것인데, 클래스를 생성할 때 static을 남발하면 메모리를 차지하는 것 또한 많아지기 때문에 주의해야한다.

 

 

Overloading

Overloading이란 단순한 의미로 동일한 기능을 수행하는 메서드가 여러 개 있다는 것이다.

즉, 두 메서드가 같은 이름을 가지고 있으나 인자의 수나 자료형이 다른 경우를 말한다.

동일한 기능을 수행하는 메서드를 추가로 작성하는 것이다.

 

작성규칙

  • modifier(접근제한자) / returnType 같아도 달라도 상관없다.
  • method 이름은 반드시 같아야 한다.
    • 이름은 같고 하는 일은 다르면 개발자 입장에서 호출하기 편리하기 때문이다.
  • 인수는 무조건 인수의 순서 or Type or 개수가(셋 중하나가) 달라야 한다.

 

class Test{
    public void aa(){
    }
    public void aa(int i){
    }    // overloading


    protected int aa(String s){
        return 4;
    }
    void aa(int i, String s){

    }
}

 

이처럼 메소드 이름은 같아도 인수의 타입, 순서, 개수가 다 다르게하여 오버라이딩 해주었다.

 

// calling method
Test t = new Test();
t.aa();
t.aa("hiiii");

 

호출할 때는 클래스를 new를 통해 객체를 생성하고 메소드와 같이 호출해준다.

t.aa(); 은 첫번째 메소드가 반환되고

t.aa("hiiii"); 은 세번째가 메소드가 반환된다.

 

오버로딩은 동일한 기능을 수행하는 것이므로 많은 로직이 겹치게 된다.

반복되는 코드를 하나의 메소드로 모아 코드를 재사용하는 것으로 사용하여 중복 코드를 제거할 수 있다.