JAVA 3. 객체와 클래스

김창민·2024년 7월 23일

BE

목록 보기
5/50

객체

세상에 존재하는 모든것

나, 너, 자동차, 연필 모두 객체다. 뿐만 아니라 운동, 음악, 강의 처럼 개념적인 것도 모두 객체라고 할 수 있다. 즉, 세상을 구성하는건 모두 객체다.(식별만 된다면)

구성

객체:자동차 속성:가격,속도,모델.. 행위:가속, 변속..

객체는 속성행위로 구성된다. 속성을 코드로 나타내면 필드, 행위를 코드로 나타내면 메소드다.

객체 상호작용

현실에서 내가 운전이라는 행위를 통해 자동차와 상호작용하듯 자바에선 객체1이 메소드를 통해 객체 2와 상호작용 할 수 있다.

객체 관계

객체들간에는 나와 자동차 처럼 사용하는, 당하는 관계가 있을 수 있고, 자동차와 바퀴처럼 포함하는,되는 관계가 있고, 탈것과 자동차처럼 상속하는,되는 관계가 있다.

객체지향 프로그래밍

앞서 말한 객체를 사용해서 프로그래밍 하는게 자바다.

4 특징

캡슐화 : 말 그대로 감싸는 것이다. 객체는 필드와 메소드를 class를 통해 하나로 묶고, 사용하는 입장에서 내부는 어떻게 구현한지 몰라도 된다.
접근제어자를 통해 열어둔 필드나 메소드를 제외한 나머지 요소에는 접근도 불가능하다. 즉, 보안성도 좋다.

상속 : 객체 관계엔 사각형과 정사각형, 탈것과 자동차 처럼 부모-자식 관계가 있다. 부모 객체의 특징은 자식이 모두 갖게 되는것이 바로 상속이다.
이를 통해서 객체간의 구조 파악이 쉽고, 공통 행위에 대한 수정도 쉬우며, 코드 중복이 줄어 재사용성이 증가된다.

다형성 : 각 객체의 고유 특성에 따라 동일한 행위라도 다른 형태로 구성되는 것이다.

추상화 : 말 그대로 구체적이지 않고 대충 뭉뚱그려 선언하는 것이다.

클래스

자동차를 만들기 위해 설계도가 필요하고, 음악을 만들기 위해 악보가 필요하듯 객체를 만들기 위해선 클래스가 필요하다. 즉, 클래스는 설계도라고 할 수 있다.

클래스를 통해 생성된 객체는 인스턴스라고 한다.

정리하자면 객체라는 개념이 클래스라는 설계도를 통해 실존하는 물건인 인스턴스가 된다.

자동차 설계도를 통해 제작된 자동차 A, 자동차 B, 자동차 C는 각각 인스턴스 A,B,C이고 각 인스턴스를 한번에 '자동차'라고 부르는 것과 같다.

구성

필드, 생성자, 메서드
필드와 메서드는 객체와 같고, 생성자가 살짝 특이하다.

만약 Car 클래스를 만든다고 생각해보자

public class Car{
	String color;
    String price;..
    
    public String getPrice(){
    	return this.price;
    }

}

생성자

클래스가 다음과 같이 구성되어 있다면 color, price같이 필드값은 어떻게 초기화 하고, 인스턴스는 또 어떻게 생성해야할지 막막하다. 이를 위해서 생성자를 사용하면 된다.

public class Car{
	String color;
    String price;..
    
    public Car(String color, String price){
    	this.color=color;
        this.price=price;
    }
    
    public String getPrice(){
    	return this.price;
    }

}

메소드와 비슷하지만 타입이 선언되지 않은게 생성자다. 생성자는 객체 생성시 호출되며 객체를 초기화하는 역할을 한다.

물론 생략해도 컴파일러가 기본 생성자를 추가해줘서 객체 생성은 가능하다. 하지만, 생성자를 하나라도 선언하면 기본 생성자는 추가되지 않는다.

오버로딩

자바는 오버로딩을 지원하기 때문에 생성자/메소드의 매개변수 형태, 개수만 바꿔준다면 동일 명이라도 무한대로 만들 수 있다.

오버로딩은 메소드/생성자 명이 동일하더라도 매개변수에 차이가 있다면 별개의 메소드/생성자로 보는 것이다.

this

위에서 생성자를 보면 this라고 써있는걸 볼 수 있다. this는 뜻 그대로 해석할 수 있는데, this를 사용하면 해당 인스턴스의 속성을 사용한다는 것이다. 보통 생성자의 매개변수 명이랑 속성명이 동일해서 햇갈리지 않도록 하기위해 사용한다.

this()

this()도 존재하는데, 본 인스턴스의 생성자를 호출하는 메소드다. 이를 이용하자면 다음과 같다.

public Car(String model) {
    this(model, "Blue", 50000000);
}

public Car(String model, String color) {
    this(model, color, 100000000);
}

public Car(String model, String color, double price) {
    this.model = model;
    this.color = color;
    this.price = price;
}

이렇게 매개변수를 이용해서 생성자를 구분해서 호출이 가능하다.

profile
일일 회고 : https://rlackdals981010.github.io/

0개의 댓글