Class vs Object

김승환·2021년 11월 3일
1

JAVA

목록 보기
1/1
post-thumbnail

정의

클래스 : 객체의 속성과 기능을 코드로 구현한 것
객체 : 클래스를 기반으로 특정 속성을 가져 구현된 것

* 노트북(클래스) - 맥북, 삼성노트북, LG그램....(객체)
* 쉽게 이해하려면 클래스는 좀 더 연관있는 데이터끼리 모아놓는 컨테이너의 역할

구조

  public(=접근 제어자) class Student(=클래스 이름){
    int(=기본 자료형) studentID;
    String(=참조 자료형) studentName;
    int grade;
    String address;
    -------------------------------------> 멤버 변수, fields
    
    public void(=반환형) showStudentInfo(){
      System.out.println(studentName + .......);
    }
    
    public String getStudentName(){
      return studentName;
    }
    
    public void setStudentName(String name){
      studentName = name;
    }
    -------------------------------------> methods
    
  }
  
  Student kim = new(=예약어) Student()(=생성자);
  kim.studentID;
  kim.studentName;
  kim.setStudentName(Kim Seung Hwan);
   -------------------------------------> object

차이

1) Class는 template 이고 Object 는 클래스의 instance 이다.
2) Class는 정의만 된 것이라 스택 메모리 위에 올라가진 않고 Object는 스택 메모리 위에 올라간다.

Class

  • 매개변수 있는 생성자
    : 프로그래머가 직접 정의해 줄 수 있으나 직접 정의했을 경우 Student kim = new Student(); 이런 식으로 못 쓴다. () 안에 멤버변수의 값들을 정의해 주고 선언해야 한다.
    즉, 원하는 혹은 필수적으로 있어야 하는 값을 생성자에 매개변수로 넣어줘서 나중에 데이터 관리하기 수월하게 할 수 있다.
    나중에 다룰 보안과 관련해서도 매개변수 있는 방식으로 선언해주는게 장점이 있다.
  • 디폴트 생성자
    : 생성자가 없는 클래스는 클래스 파일을 컴파일 할 때 자바 컴파일러가 자동으로 생성자를 만들어 준다.
    디폴트 생성자는 매개변수가 없고 구현코드도 없다.
    필요에 따라 사용자가 직접 생성자를 정의할 수 있다.
  • 생성자 오버로드
    : 위의 두 생성자를 프로그래머가 한 클래스 안에 쓴 경우로 원하는 생성자를 골라서 써줄 수 있는 장점이 있다.
public class Person {
	  String name;
	  float height;
	  float weight;
   
	  public Person() {} //디폴트 생성자
     
	  public Person(String pname) {
		   this.name = pname;
	  }
	  public Person(String pname, float pheight, float pweight){
		   name = pname;
		   height = pheight;
		   weight = pweight;
	  } // 매개변수 있는 생성자
} 

Object

  • Student kim = new Student();
    1) 선언하면 하나의 Student 객체(=인스턴스)가 힙 메모리에 생성. kim 이라는 변수는 인스턴스가 저장된 메모리를 가리킨다.
    2) kim 은 지역변수로 Stack 위에 메모리를 차지하고 있으나 heap 안의 데이터 값을 가리킨다. (즉, kim 에는 힙 메모리의 주소를 대입한다.)
    3) System.out.println(kim) 을 하면 kim에 대한 값들이 있는 메모리 주소 값(=해시 코드)을 추출한다. '클래스 이름@주소값' 형태.

기타 용어 정리

객체 : 객체지향 프로그램의 대상, 생성된 인스턴스

인스턴스 : 클래스가 메모리에 생성된 상태

메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현

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

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

해시 코드 : (자바의 경우) 자바 가상 머신에서 객체가 생성되었을 때 생성된 객체에 할당하는 가상주소

사용법

깃헙링크

참조
1) 점프 투 자바, 박응용 저
2) Do it! 자바 프로그래밍 입문, 박은종 저

profile
사람의 마음을 사는 개발자가 꿈입니다. The Unexpected do The Unexpected.

0개의 댓글