본문 바로가기

Study for Backend/Programming language - Java

[Java기초] Class와 객체1

1. 클래스 

객체를 정의해 놓은 것
객체의 설계도 또는 틀
객체를 생성하는데 사용됨

2. 객체

실제로 존재하는 것. 사물 또는 개념
객체의 용도는 객체가 가지고 있는 기능과 속성에 따라 다름
클래스에 정의된 내용대로 메모리에 생성된 것

3. 객체 만드는 방법

인스턴스화클래스로부터 객체를 만드는 과정
어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

객체 : 모든 인스턴스를 대표하는 포괄적인 의미
인스턴스 : 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미

객체의 구성 요소
속성(property)
멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
기능(function )
메서드(method), 함수(function), 행위(behavior)

4. new 연산자
인스턴스(객체)를 생성해주는 역할

메모리(Heap 영역)에 데이터를 저장할 공간을 할당받고
그 공간의 참조값을 객체에게 반환하여 주고 이어서 생성자를 호출한다.

5. 메서드
특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것
 
6. 메서드 선언부
반환타입, 메서드 이름, 매개변수 선언으로 구성되어 있음.

*참고
인자(argument) : 메서드를 호출할 때 괄호 안에 지정해준 값
매개변수(parameter) : 메서드를 선언할 때 정의한 것

메서드 구현부
메서드가 호출되었을 때 수행될 문장
메서드의 반환타입이 void가 아닌 경우, 구현부 안에 return 반환값이 반드시 포함되어 있어야한다.

7. 생성자
인스턴트가 생성될 때 호출되는 인스턴스 초기화 메서드
여기서 인스턴스 초기화란, 인스턴스 변수들을 초기화하는 것을 뜻한다.
*연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.

인스턴스 생성 과정
연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
생성자 Card()가 호출되어 수행된다.
연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다.

생성자의 조건
생성자의 이름은 클래스의 이름과 같아야한다.
생성자는 리턴 값이 없다.

생성자 정의하는 방법
기본 생성자
모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야한다.
생성자가 정의되어 있지 않을 경우, 컴파일러가 기본생성자를 추가해서 컴파일 한다.
기본 생성자는 아무 매개변수도, 아무 내용도 없는 것을 말한다.

매개변수가 있는 생성자
말그대로 매개변수가 있는 생성자다.
생성자도 메소드 처럼 매개변수를 선언하여 호출 시 값을 넘겨 받아서 인스턴스 초기화 작업에 사용될 수 있다.

8. this
JAVA에서 this는 객체, 자기자신을 나타낸다.
this를 사용하는 상황은 크게 3가지가 있다.
- 클래스의 속성과 생성자/ 메소드의 매개변수의 이름이 같은 경우
- 클래스에 오버로딩된 다른 생성자 호출
- 객체 자신의 참조값을 전달하고 싶을 때

오버로딩
너무 많이 적재했다(Overloading)는 뜻
같은 이름의 메서드에 매개변수의 타입, 개수를 다르게 한 것

 

*참고

오버로딩 - 기존에 없는 새로운 메소드를 추가하는 것

오버라이딩 - 상속받은 메소드를 재정의 하는 것


참고링크
https://doozi0316.tistory.com/entry/JAVA-5%EC%A3%BC%EC%B0%A8-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B0%9D%EC%B2%B4-new-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%83%9D%EC%84%B1%EC%9E%90-this

 

// Java 프로그래밍 - 클래스와 객체_1

// Car 클래스 - 객체변수, 메소드
class Car{
    String name;
    String type;

    public void printCarInfo(){
        System.out.println("===  car info  ===");
        System.out.println("name = " + name);
        System.out.println("type = " + type);
    }

    public void move(){
        System.out.println("이동!");
    }

    public void breake(){
        System.out.println("정지!");
    }
}

// Car2 클래스 - 생성자, this
class Car2{
    String name;
    String type;

    Car2(String name , String type){
        this.name = name;
        this.type = type;
    }

    public void printCarInfo(){
        System.out.println("===  car info  ===");
        System.out.println("name = " + name);
        System.out.println("type = " + type);
    }

    public void load(){
        System.out.println("짐을 주세요!");
    }

    public void horn(){
        System.out.println("빵빵!");
    }

}


public class Main {
    public static void main(String[] args) {
//      Car 클래스 사용
        Car myCar = new Car();
        myCar.name = 'Tesla';
        myCar.type = 'Electronic'';
        myCar.move();
        myCar.breake();

//      Car2 클래스 사용
        Car2 car2 = new Car2("Hyundai","SUV");
        car2.printCarInfo();
        car2.load();
        car2.horn();

    }
}


//연습
//  Practice
//  다음 클래스 직접 만든 후 객체 생성
//  클래스명: Animal
//  특성: 이름, 무게, 분류
//  기능: 먹기, 잠자기, 걷기, 뛰기

class Animal{
    String name;
    double weight;
    char classfiction;

    Animal(String name , double weight , char classfiction ){
        this.name = name;
        this.weight = weight;
        this.classfiction = classfiction;
    }//생성자
    public void printInfo(){
        System.out.println("===  Animal info  ===");
        System.out.println("name = " + name);
        System.out.println("type = " + weight);
        System.out.println("name = " + classfiction);
    }
    public void eating(){
        System.out.println("먹기!");
    }

    public void sleeping(){
        System.out.println("잠자기!");
    }

    public void walking(){
        System.out.println("걷기!");
    }

    public void running(){
        System.out.println("뛰기!");
    }

}

public class Practice {
    public static void main(String[] args) {
        // Test code
        Animal animal1 = new Animal("강아지", 5.0, "포유류");
        Animal animal2 = new Animal("구피", 0.01, "어류");
//
        animal1.printInfo();
        animal2.printInfo();


    }
}