프로그래밍/Java

Java class(클래스)와 Object(객체)

브이몬 2021. 9. 8. 15:39

클래스(설계도)란

  • 객체를 정의해 놓은 것. 객체의 틀.(설계도)
  • 데이터와 함수의 결합이다.
  • 사용자 정의 타입이다.

 

 객체(제품)란

  • 실제로 세상의 모두 존재하는것. 모든 사물.
  • 클래스로부터 생성(new)된다.
  • 생성된 객체를 인스턴스라고한다. (ex: Car인스턴스)
  • 객체들은 독립체로 존재한다.

 

 객체의 구성요소(메서드)

  • 객체가 가지고 있는 기능과 속성.
  • 어떤 동작을 나타내는 것

 

클래스(틀) 객체(제품) 객체의 기능(메서드)과 속성(변수)
자동차 설계도 자동차 속성: 운전대, 브레이크, 기어, 색상, 베기량 등.
기능: 뒤로가기 앞으로가기, 멈추기 등.
TV 설계도 TV 속성 : 크기, 색상, 볼륨, 채널
기능: 켜기, 끄기, 볼륨 업다운, 채널

 

 인스턴스화

  • 클래스를 객체(인스턴스)를 생성(new)하는것을 인스턴스화라고 한다.

 

 인스턴스 변수

  • 클래스 내에 있는 변수를 인스턴스 변수라고 한다.

 

 클래스 사용방법

1. 클래스 작성

    ① 패키지(폴더 개념으로 생각하면 좋다.)

        - 패키지를 만들어두면 클래스를 만들면 위에 자동으로 해당 패키지가 작성되어 있다.

    ② 클래스

        - 파일 이름과 클래스 이름이 일치해야 한다.

        - 클래스명 첫 글자는 대문자로 해야 한다.

     ③ 생성자(constructor)

        - 반환 값이 없고 클래스명과 일치해야 하고 객체가 생성될 때 new와 함께 호출된다.

        - 객체가 생성될때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행하는 메서드를 호출한다.

        - 대부분 생성자는 외부에서 접근 가능하지만 필요에 의해서 private로 선언될 때도 있다.       

        - 기본 생성자(default constructor)

              - 클래스에는 반드시 하나이상의 생성자가 존재한다.

              - 클래스에 생성자를 구현하지 않아도 new키워드와 함께 생성자를 호출할 수 있다.

              - 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어준다.

              - 매개변수가 없고 구현부가 없다.

        - 생성자 this()

              - 생성자에서 다른 생성자 호출할때 사용. (2번생성자와 3번생성자가 1번생성자를 호출)

              - 다른 생성자 호출할때 첫 줄에서만 사용가능하다.(두번째줄도 작성하면 오류가난다.) 

package com.javalec.makeClass;   //만든 패키지

public class CarClass{    //클래스

	String color;         //인스턴스변수, car인스턴스의 멤버변수
    static int number;    //클래스변수(static변수, 공유변수)
    int door;   //문의개수

	public CarClass(){    //생성자 : 클래스명과 동일한데 클래스가 처음 생성될때 호출된다. 
                          //기본생성자(default constructor)이다.
        }                     //메인메서드에서 CarClass car= new CarClass();치면 객체 생성이된다.
        
        
    publci CarClass(String color, int door){ //생성자 1번
        this.color = color;                  //참조 변수 this
        this.door = door;                    //this.변수는 인스턴스변수이고 this가 붙지않는것은 지역변수
    }
    
    public CarClass(){ //생성자 2번            //2번과3번은 this로 써서 1번을 호출한다. 
        this("red", 4);                       //publci CarClass(String color, int door) 호출하는거와 같다.
    }                                         //다른생성자 호출할때 첫줄만 사용가능하다.
    public CarClass(String color){//생성자 3번
        this(color, 4);
    }
    public CarClass(){ this로 아무것도 지정해주지않으면  color, door는 디폴트값이 도니다.
        color="red";
        door=4;
    }
    
   	public void handleLeft(){  //운전대 왼쪽 메서드
    }
}

    ④ 변수

       - 클래스 변수(Class Variable) : 클래스 영역, 클래스가 메모리에 올라갔을 때 생성된다. 객체 생성이 필요 없다.

                                               클래스가 처음 로딩될 때 단 한번 초기화 된다.

       - 인스턴스 변수(Instance Variable) : 클래스 영역, 인스턴스가 생성 되었을 때 생성된다. 객체 생성이 필요하다.

                                                      생성되면 자동으로 0으로 초기화된다. 생성될때마다 초기화된다.

            -참조변수 this

                 - 인스턴스 자신을 가리키는 참조변수, 인스턴스 주소가 저장된다.

                 - 인스턴스 메서드(생성자포함)에서 사용가능

                 - 지역변수(lv)와 인스턴스변수(iv)를 구별할 때 사용한다.

       - 지역 변수(local Variable) : 메서드 영역. 변수 선언문이 수행되었을 때 생성된다. 수동으로 초기화를 시켜야함

 

2. 객체 생성(instance)

  • 클래스명 변수명 = new 클래스명();
  • 클래스명 변수명: 클래스의 객체를 참조하기 위한 참조 변수를 선언
  • new 클래스명 : 클래스 객체(인스턴스)를 생성(new 키워드를 사용하여 인스턴스 생성)하고 변수에 대입하면 객체 주소를 참조 변수에 저장

 

3. 객체의 사용

클래스 내에 메서드가 작성이 되면 메인 메서드에 객체 생성한 후

객체변수명.메서드()로 호출할 수 있다.

Carclass car= new Clarclass();

car.color=red;      //car인스턴스의 멤버변수 color는 red로 한다

car.handleLeft();   //car인스턴스의 메서드 handleLeft()을 호출한다.

 

힙 메모리(heap memory, 동적 메모리)

  • 생성된 인스턴스는 동적 메모리에 할당된다.
  • C나 C++은 주기적으로 개발자가 사용한 메모리를 해제해야 하지만 Java에서는 가비지 컬렉터가 자동으로 사용하지 않는 메모리를 수거해간다.
  • 하나의 클래스로부터 여러 개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 된다.

 

 하나의 소스파일에 여러 클래스 작성

  • 소스파일 이름과 여러 클래스 중 하나는 클래스 이름과 일치해야 하고 public class가 붙어있어야 한다. 
  • 둘 이상의 public class가 존재하면 안 된다.
  • public class가 존재하지 않으면 소스파일의 이름과 여러 클래스 중 클래스 이름이 하나만 같으면 된다.
  • 대소문자를 구분하기 때문에 대소문자까지 일치해야 한다.

 

 객체 배열

객체 배열(참조 변수 배열)

Car car1, car2, car3; 을 Car[] carArr=new Car[3]; 하면 객체가 생성해서 배열의 각 요소에 저장된다.

CarArr[0]=new Car();

CarArr[1]=new Car();

CarArr[2]=new Car();

//Car[] carArr=new Car[3]; 로 참조 변수 배열을 선언하면 객체(CarArr[0]=new Car();)를 넣어줘야한다.

 

Car[] carArr=new Car[3]; 와 CAr[] carArr={new Car(), new Car(), new Car()}; 이렇게 표현 가능하다.

 

 

 

참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수

 

참조 값 : 생성된 인스턴스의 메모리 주소 값