BE전문가 프로젝트

5.객체 지향 프로그래밍(객체 및 Class에 대하여) 본문

JAVA

5.객체 지향 프로그래밍(객체 및 Class에 대하여)

원호보고서 2023. 11. 7. 23:16

객체

Object(물체)가 가지고 있는 속성과 동작을 하나로 묶은 것을 객체라고 한다. 우리가 살고 있는 세상으로 비교해보면 사람의 경우 팔, 다리, 눈, 코 등의 속성을 가지고 있으며 뛰기, 먹기 등 동작을 표현할 수 있다. 이것을 자바에서는 필드와 메소드라고 표현한다.

 

객체간의 관계

집합관계

  • 하나의 큰 객체안에 여러개의 객체들이 속해있는 것을 의미한다.
  • ex) 자동차안에는 핸들, 엔진, 기어 등이 속해있다.

사용관계

  • 객체가 다른 객체의 메소드를 사용하는 것을 의미한다.
  • ex) 사람이 자동차 기능의 달린다를 사용한다.

상속관계

  • 부모객체를 기반으로 자식객체를 만드는 것을 의미한다.
  • ex)침대는 가구의 한 종류이다.

 

클래스

객체에 대한 설계도를 의미한다. 따라서 객체를 만들기 위해서는 사전에 클래스를 정의해야한다.

이 클래스로 만들어진 객체를 인스턴스라고 부른다.

 

클래스의 용도

클래스에는 사용 용도에 따라 라이브러리용과 실행용으로 나눌 수 있다. 이전 포스팅들을 보면 main()메소드가 바로 실행용이며 나머지 클래스는 라이브러리용이다. 따라서 실행용 메소드는 단 한개만 존재하며 나머지 클래스는 라이브러리용이라는 것을 알 수 있다.

 

생성자

객체 생성시 호출되어 객체의 초기화를 담당한다. 여기서 객체 초기화는 필드 및 메소드를 호출하여 객체를 사용할 수 있도록 하는 것을 의미한다.

 

기본 생성자

모든 클래스는 생성자가 반드시 존재한다.

public class Car {
	
    String wheel;
    String color;
    String name;
    
    Car(){
    }
    
}

위에 작성한 코드에서 Car()을 자세히 보면 중괄호안에 아무것도 없는 것을 볼 수 있는데 이것을 기본 생성자라고 한다.

따로 작성하지 않아도 컴파일 후 바이트 코드 파일을 보면 기본 생성자가 자동으로 생성된 것을 볼 수 있다.

하지만 선언한 생성자가 한개라도 없으면 컴파일러는 기본 생성자를 추가하지 않는다.

 

생성자

생성자를 만드려면 아래와 같이 작성하면 된다.

public class Car {
	
    String wheel;
    String color;
    String name;
    
    Car(String wheel, String color, String name){
    	this.whell = wheel;
        this.color = color;
        this.name = name;
    }
    
}

 

 

다른 생성자 호출하여 중복 코드 없애기

생성자 오버로딩이 많아지게 되면 어쩔 수 없이 중복된 코드들이 나올 수 밖에 없다. 이것을 해결하기 위해 this() 메소드를 활용하는 것이 좀 더 깔끔한 코드를 만드는데 도움이 된다.

package number1;

public class Car {

    String wheel;
    String color;
    String name;

    Car(){

    }

    Car(String wheel){
        this(wheel, "빨강", "프라이드");
        
    }

    Car(String wheel, String color) {
        this(wheel, color, "프라이드");

    }

    Car(String wheel, String color, String name) {	//공통 실행코드
        this.wheel = wheel;
        this.color = color;
        this.name = name;
    }
}

위에 있는 코드는 공통 실행코드를 호출하여 위에 두개의 생성자를 만들 수 있도록 하는 것을 표현한 코드이다.

'JAVA' 카테고리의 다른 글

7.상속  (0) 2023.11.08
6. 인스턴스 멤버 및 정적 멤버  (0) 2023.11.08
4. main mathod  (0) 2023.11.06
3. 참조 타입과 참조 변수  (0) 2023.11.06
2. 반복문  (0) 2023.11.04
Comments