클래스 : 객체의 속성과 기능을 코드로 구현한 것
객체 : 클래스를 기반으로 특정 속성을 가져 구현된 것
* 노트북(클래스) - 맥북, 삼성노트북, 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는 스택 메모리 위에 올라간다.
- 매개변수 있는 생성자
: 프로그래머가 직접 정의해 줄 수 있으나 직접 정의했을 경우 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; } // 매개변수 있는 생성자 }
- Student kim = new Student();
1) 선언하면 하나의 Student 객체(=인스턴스)가 힙 메모리에 생성. kim 이라는 변수는 인스턴스가 저장된 메모리를 가리킨다.
2) kim 은 지역변수로 Stack 위에 메모리를 차지하고 있으나 heap 안의 데이터 값을 가리킨다. (즉, kim 에는 힙 메모리의 주소를 대입한다.)
3) System.out.println(kim) 을 하면 kim에 대한 값들이 있는 메모리 주소 값(=해시 코드)을 추출한다. '클래스 이름@주소값' 형태.
객체 : 객체지향 프로그램의 대상, 생성된 인스턴스
인스턴스 : 클래스가 메모리에 생성된 상태
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현
참조 변수 : 힙 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성된 인스턴스의 메모리 주소 값
해시 코드 : (자바의 경우) 자바 가상 머신에서 객체가 생성되었을 때 생성된 객체에 할당하는 가상주소
깃헙링크
참조
1) 점프 투 자바, 박응용 저
2) Do it! 자바 프로그래밍 입문, 박은종 저