[JAVA] 객체, 클래스와 생성자 + 관련 예제

Benjamin·2022년 10월 14일
0

JAVA

목록 보기
2/28
post-thumbnail

객체

개념

  • 대상을 나타낸다
  • 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것
  • 속성과 동작으로 이루어져 있다 : 속성을 멤버변수, 기능을 메서드(함수)라고도 한다
    -> 흔히 '붕어빵'이라고 표현한다

특징

  • OOP의 관점에서 클래스의 타입으로 선언되었을 때 '객체'라고 부른다
  • 클래스로부터 만들어진 객체를 '클래스의 인스턴스(Instance)라고도 부른다

인스턴스

개념

  • OOP에서 어떤 클래스에 속하는 객체를 인스턴스라고 부른다

특징

  • 객체가 만들어지는 과정을 클래스의 인스턴스화라고 한다.

클래스

개념

  • 객체를 생성하기 위한 설계도 혹은 틀
  • 객체들이 공통적으로 갖는 속성을 묶어 놓아 정의내린 것 = 추상화
    -> 흔히 '붕어빵을 찍는 기계'라고 표현한다

클래스 예제

public class Student {
	
    //멤버 변수
    String name;
    int number;
    int grade;
	
    // 메서드(함수)
    public void getGrade() {
        grade += 10;
    }

    public static void main(String[] args) {
        Student student1 = new Student(); // 객체를 생성할때는 new 연산자를 통해 생성한다.
      									// Student()는 생성자를 호출한다는 의미이다.(생성자는 좀 이따 설명)
        student1.name = "영희";
        student1.number = 1;
        student1.grade = 80;

        System.out.println("학생의 이름은 " + student1.name);
        System.out.println("학생의 번호는 " + student1.number);
        System.out.println("학생의 성적은 " + student1.grade);

        student1.getGrade();

        System.out.println("학생의 성적은 " + student1.grade);

    }
}

실행결과!

학생의 이름은 영희
학생의 번호는 1
학생의 성적은 80
학생의 성적은 90

이런식으로 코드를 작성하면, 일일이 객체의 속성을 지정해서 출력을 해주어야해서 귀찮을 뿐더러
코드도 길어질것이다.
그래서 클래스에는 생성자(Constructor)라는 것이 있다.

생성자(Constructor)

생성자는 new 연산자를 통해 객체를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메서드라고 생각하면 편하다.(메서드와 비슷하지 그 의미가 같은 것은 아니다) 생성자는 멤버 변수를 초기화하는 역할을 한다.

선언방법


위 사진과 같고, 빨간색부분이 필수이며 파란색은 선택이다.
생성자는 리턴값이 없다.

따라서 아래와 같이 생성할 수 있다.

class Student {
	Student() {} // 매개변수가 없는 생성자
  	
    Studnet(String name, int number){} // 매개변수가 있는 생성자
}

그런데 아까 처음에 작성한 예제 코드에서는 생성자를 선언하지 않았는데 객체가 잘 생성되었다.
그 이유가 무엇일까?
그것은 생성자를 선언하지 않으면 컴파일러에서 자동으로 기본 생성자(Default Constructor)를 생성해주기 때문이다.

기본 생성자는 public Class() {}와 같은 형태이다.
기본 생성자는 생성자가 하나도 없을 경우, 자동으로 생성해 주기 때문에 이에 유의하면서 코드를 작성해야 한다.
예제를 통해 생성자에 대해 살펴보자.

public Student() {
        String name = "학생";
        int number = 100;
        int grade = 0;

        System.out.println("학생의 이름은 " + name);
        System.out.println("학생의 번호는 " + number);
        System.out.println("학생의 성적은 " + grade);
    }

    public static void main(String[] args) {
        Student student1 = new Student();

    }

처음에 작성한 코드를 위와 같이 고쳐보자
그러면 실행 결과가 다음과 같이 나올 것이다.

실행결과
학생의 이름은 학생
학생의 번호는 100
학생의 성적은 0

그렇다면 이제 매개변수를 받는 생성자를 만들어서 우리가 원하는 학생 객체를 만들어 보자.

번호가 1이고 성적은 50인 영희학생과 번호가2이고 성적은 40인 철수학생을
매개변수를 받는 생성자를 이용해 만들어보자

public Student(String studentName, int studentNumber, int studentGrade) {
        String name = studentName;
        int grade = studentNumber;
        int number = studentGrade;

        System.out.println("학생의 이름은 " + name);
        System.out.println("학생의 번호는 " + number);
        System.out.println("학생의 성적은 " + grade);
    }

    public static void main(String[] args) {
        Student student1 = new Student("영희", 1, 50);
        Student student2 = new Student("철수", 2, 40);
    }

참고사이트
https://velog.io/@lshjh4848/클래스와-생성자

0개의 댓글