객체를 만들기 위해서 우선 클래스를 정의하고, 클래스에 대한 인스턴스를 만들었다.
클래스 : 설계도, 정의, 연관되어 있는 변수와 메소드의 집합.
클래스 = 필드(데이터) + 메소드(처리동작)
인스턴스 : 구체적인 제품, 호출.
객체 : 상태(변수)와 행위(메소드)의 집합
클래스를 인스턴스화 할 때는 변수에 담아야 한다는 것과 이 때 사용하는 변수의 데이터 타입은 그 클래스가 된다는 점.
즉 하나의 클래스를 바탕으로 서로 다른 상태를 가진 인스턴스를 만들면 서로 다른 행동을 하게 된다는 것을 알 수 있다. 하나의 클래스가 여러개의 인스턴스가 될 수 있다는 점이 객체 지향이 제공하는 가장 기본적인 재활용성이라고 할 수 있다.
필드와 메소드가 합쳐진 객체를 뜻함.
(ex. String클래스(char[]필드와 string[]메소드가 합쳐짐)
아이디로그인시 검색방법 : 대문자로 만들어놓고 비교, 소문자로 만들어놓고 비교,
각 데이터는 주소값이 존재(생성자)
################## 멤버 ##################
멤버 : 구성원
################## 클래스선언 ##################
<예시>
class Person{ 객체를 정의/생성하는 툴인 Person 이라는 클래스를 만든다(관례상 클래스의 이름 첫글자는 대문자)
String name; 문자열 값을 담는 name 이라는 변수를 선언한다
int age; 정수 값을 담는 age 라는 변수를 선언한다 데이터 = 필드
int weight; 정수 값을 담는 weight 라는 변수를 선언한다
String eat(){ 문자열 값을 리턴값으로 받는 eat라는 메소드를 선언한다
return "eat"; 이 메소드를 호출한 곳에 "eat"를 리턴한다
} 처리동작 = 메소드
String sleep(){ 문자열 값을 리턴값으로 받는 sleep 라는 메소드를 선언한다
return "sleep"; 이 메소드를 호출한 곳에 "sleep"를 리턴한다
}
}
################## 클래스변수 ##################
클래스 변수의 용도를 정리해보면 아래와 같다.
- 인스턴스에 따라서 변하지 않는 값이 필요한 경우
(이런 경우 final을 이용해서 상수로 선언하는 것이 바람직)
- 인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우
- 값의 변경 사항을 모든 인스턴스가 공유해야 하는 경우
################## 클래스메소드 ##################
클래스변수에 직접 접근가능.
일회용처럼 굳이 인스턴스를 만들 필요없을때 사용.(메소드가 인스턴스 변수를 참조하지 않는다면 클래스 메소드를 사용해서 불필요한 인스턴스의 생성을 막을 수 있다.)
- 인스턴스 메소드는 클래스 맴버에 접근 할 수 있다.
- 클래스 메소드는 인스턴스 맴버에 접근 할 수 없다.
변수와 필드는 서로 대체가능한 용어임.
인스턴스 변수 -> Non-Static Field
클래스 변수 -> Static Field
필드(field)라는 것은 클래스 전역에서 접근 할 수 있는 변수
################## 객체의 생성과 사용 ##################
<예시>
class PersonExample{ 객체를 정의/생성하는 툴인 PersonExample 이라는 클래스를 만든다
public static void main(String[] args){
Person personObj1; personObj1 변수에 클래스의 객체를 담는 personObj1이라는 변수를 선언한다
personObj1 = new Person(); personObj1 변수에 Person 클래스의 객체를 새로 생성하여 저장한다.
personObj1.name = "김삿갓"; personObj1 변수 안의 name 변수에 "김삿갓"을 저장한다.
* Person personObj1;
personObj1 = new Person();
-> Person personObj1 = new Person(); 과 동일!
Person 이라는 클래스의 객체를 담는 personObj1 이라는 변수를 선언하고 Person 클래스의 객체를 새로 생성하여 저장한다.
* new 연산자 : "새롭게 ~ 을 생성한다"
* 객체가 생성되었으면 그 객체에 이는 데이터와 메소드에 접근하여 이를 참조하거나 값을 저장하여 사용해야함. 이때 '.'을 사용하여 데이터와 메소드의 소속을 밝혀줌.