☕️Java 클래스, 객체, 인스턴스, 생성자

hamsang·2022년 7월 13일
0

Java

목록 보기
21/36
post-thumbnail

✏️ 클래스(Class)란?

  • Java에서 객체를 생성하기 위한 일종의 설계도 혹은 틀
  • 연관된 변수와 메서드의 집합
public class 클래스이름 {

}

✏️ 객체(Object)란?

  • 소프트웨어 세계에 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체
  • 객체는 속성기능으로 구성되어 있다.
ex) 사람
	속성: 이름,나이
	동작: 달리다, 걷다, 공부하다

👩🏻‍💻 객체의 속성과 기능

일반적으로 객체는 다수의 속성과 다수의 기능을 갖습니다.
객체 = 속성과 기능의 집합

  • 속성 : 멤버변수(variable)
  • 기능 : 메서드(method)
ex) TV
속성: 채널 > int channel;
기능: 채널 높이기 > channelUp() {...}

✏️ 인스턴스(Instace)란?

  • 현실의 객체를 소프트웨어 내에서 구현한 실체
  • 클래스가 붕어빵 틀이라면 그 틀을 통해 생성된 실제 객체(붕어빵) 하나하나를 해당 클래스의 인스턴스라고 부른다.
  • 생성된 인스턴스들은 각자 고유의 특성을 가지고 독립적으로 존재한다.

자바 프로그램 실행시 클래스는 JVM 메모리의 클래스 영역에 로드되고, 이 클래스를 사용하여 힙 영역(Heap Area)에 새로운 인스턴스(객체)를 생성할 수 있다.

참조변수와 인스턴스의 연결


👩🏻‍💻 생성자(Constructor)

인스턴스의 생성과 사용


📍 new 연산자

자바에서는 new 연산자를 통해 인스턴스를 생성할 수 있다.

  • 클래스명 참조변수명 = new 생성자();

Card c = new Card();

📍 생성자 (Constructor)

📝 기본 생성자

  • 모든 클래스에서는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.
  • 만약 따로 생성자가 정의되어있지 않다면 컴파일러가 기본생성자를 추가해 컴파일한다.
  • 구현 코드와 매개변수가 없다.
Card() {}

📝 매개변수가 있는 생성자

  • 생성자도 메소드처럼 매개변수를 선언하여 호출 시 값을 넘겨 받아 인스턴스 초기화에 사용될 수 있다.
public class Person {

    String name;
    String gender;
    
    //매개변수가 있는 생성자
    Person(String name, String gender) {
        this.name = name;
        this.gender = gender;
    }

}

📍 참조변수와 인스턴스 연결

public class Main {
 
    public static void main(String[] args) {
	    Parent p = new Child();
	    Child c = new Child();
 
        System.out.println(p.a); // prints 200
        System.out.println(c.a); // prints 100
 
        p.method(); // prints "Child Method"
        c.method(); // prints "Child Method"
    }
}
 
class Parent {
    int a = 200;
    void method(){
        System.out.println("Parent Method");
    }
}
 
class Child extends Parent {
    int a = 100;
    void method(){
        System.out.println("Child Method");
    }
}

Child의 인스턴스인데, Parent 타입의 참조변수인 경우와 child 타입의 참조변수인 경우에는 차이점이 있다.

첫번째, 참조할 수 있는 멤버의 범위가 다르다.
두번째, 접근하는 멤버변수가 달라진다.

위의 예시에서 조상클래스 Parent의 인스턴스 변수 x, 메서드 method는 자식클래스 Child에서 중복 정의되고 오버라이딩되었다. 이 때 메서드의 경우, 동일하게 자식클래스의 메서드 즉 오버라이딩된 메서드를 출력하지만, 변수의 경우 참조타입의 멤버변수로 접근한다.

만약 인스턴스 변수를 중복 정의하지 않은 경우, 선택의 여지가 없기 때문에 조상클래스의 멤버를 호출한다.

profile
햄생

0개의 댓글

관련 채용 정보