객체
객체의 사전적 의미는 의사나 행위가 미치는 대상 이다.
구체적, 추상적 데이터의 단위이며 예를 들자면 학생, 회원, 생산, 주문, 배송 등등 정도
⇒ 객체 지향 프로그램의 대상, 생성된 인스턴스
객체의 속성은 멤버변수로, 객체의 기능은 메서드로 구현한다.
public class Student{
public int studentId;
public String studentName;
public String address;
public void showStudentInfo(){
System.out.println(studentId + "학번의 이름은" + studentName + "이고, 주소는 " + address + "입니다.");
}
public String getStudentName(){
return studentName;
}
public void setStudentName(String name){ //메서드
studentName = name;
}
}
클래스는 크기가 딱 정해져있는건 아니고,, 메인에서 클래스 (속성 선언) 데이터 타입 선언해서 변수등록 후 메서드를 사용할 수 있다.
Student studentLee = new Student();
//studentLee -> 참조 변수
이러한 인스턴스가 생성되는 곳은 동적 메모리인 힙 메모리이고 지역 변수는 스택 메모리에 저장된다.
인스턴스 (instance)
- 클래스란, 객체의 속성을 정의하고, 기능을 구현하여 만들어 놓은 코드 상태
- 실제 클래스 기반으로 생성된 객체 즉, 인스턴스는 각각 다른 멤버 변수 값을 가지게 된다. → 당연함 각각 다른 메모리 주소를 가짐
- new 키워드를 사용하여 인스턴스 생성
힙 메모리
- 생성된 인스턴스는 동적 메모리인 힙 메모리에 할당된다.
- C 나 C++ 에서는 사용한 동적 메모리를 개발자가 해제 시켜야한다.
- 자바에서는 Gabage Collector 가 주기적으로 사용하지 않는 메모리를 수거합니다. 똑똑한 놈,,
- 하나의 클래스로부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 된다.
용어 정리
객체
객체란, 객체 지향 프로그램의 대상으로 생성된 인스턴스이다.
클래스
객체를 프로그래밍 하기 위해 코드로 정의해 놓은 상태이다.
인스턴스
new 키워드를 사용하여 클래스를 메모리에 생성한 상태이다.
멤버 변수
클래스의 속성, 특성이다.
메서드
멤버 변수를 이용하여 클래스의 기능을 구현한 함수이다.
참조 변수
메모리에 생성된 인스턴스를 가리키는 변수이다.
참조 값
생성된 인스턴스의 메모리 주소 값이다.
생성자 (Constructor)
- 객체를 생성할 때 new 키워드와 함께 사용한다.
생성자는 일반 함수 처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new 와 함께 호출 됨
- 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출 함
- 생성자는 반환 값이 없고 , 클래스의 이름과 동일하다.
- 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private으로 선언되는 경우도 있다.
기본 생성자 (default constructor)
클래스에는 반드시 적어도 하나 이상의 생성자가 존재한다.
클래스에 생성자를 직접 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있는데, 클래스에 생성자가 하나도 없는 경우 컴파일러가 자동적으로 생성자 코드를 넣어준다.
기본 생성자는 매개 변수가 없고 구현부가 없다.
컴파일러가 제공해 주는 기본 생성자 외에 필요에 의해 생성자를 직접 구현할 수 있다.
생성자 오버로딩
- 생성자 정의하기
생성자를 구현해서 사용할 수 있는데, 클래스에 생성자를 따로 구현하면 기본 생성자인 default constructor가 제공되지 않는다. 생성자를 호출하는 코드에서 여러 생성자 중 필요에 따라 호출해서 사용할 수 있다.
public class UserInfo {
public String userId;
public String userPassWord;
public String userName;
public String userAddress;
public String phoneNumber;
public UserInfo(){}
public UserInfo(String userId, String userPassWord, String userName) {
this.userId = userId;
this.userPassWord = userPassWord;
this.userName = userName;
}
public String showUserInfo() {
return "고객님의 아이디는 " + userId + "이고, 등록된 이름은 " + userName + "입니다.";
}
}
다음과 같은 UserInfo 클래스를 생성할때 직접 생성자를 정의하는것 외에 default 생성자를 구현할 수 있다.
참조 자료형 변수
변수의 자료형은 기본 자료형과 참조 자료형이 있다.
- 기본 자료형 → int, long, float, double 등
- 참조 자료형 → String, Date, Student 등
참조 자료형은 클래스형으로 변수를 선언한 자료형도 포함된다.
기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다르다.
참조 자료형을 사용할 때는 해당 변수에 대해 생성하여야 한다.
(String 클래스는 예외!! 적으로 생성하지 않고 사용할 수 있다. 하하.. 그래그래 )
다음글은 접근제어자와 캡슐화에 대해서 더 자세히 써보겠다요,,,,
'Java' 카테고리의 다른 글
[Java] - 람다식, Stream API, 인터페이스 (0) | 2024.07.15 |
---|---|
Java : 접근 제어 지시자 (access modifier) & 캡슐화 (0) | 2023.12.12 |