자바에서 객체란??
클래스에서 정의된 내용을 new 연산자를 통해 heap 메모리에 생성된 것
①정의 : 객체의 속성과 기능에 대해 정의한 것
②필수요소 : 캡슐화, 추상화의 적용
③등장배경
① 정의 : 유연성을 위해 구체적인 것을 제거. 클래스의 속성과 기능 중 공통적인 것은 추출하고 불필요한 것은 제거하는 과정
② 장점 :
ex)
국민 정보 관리 프로그램 - 국민 한 사람의 정보(속성)을 추상화한다면?
: 5천만명의 변수를 생성하고 만들 수 없으므로 공통적인 속성을 만들고 각각의 정보를 넣어서 사용한다.
③ 클래스 다이어그램
=>앞의 -, + 는 접근제한형을 private, public으로 하라는 의미.
① 데이터의 직접 접근 제한을 원칙으로 한다
-> 정보 은닉화, 보호화
② 캡슐화 원칙
① 정의 : new 연산자를 통해 heap 메모리에 생성된 것
ex)
Student 김철수 = new Student(); ⇒ 인스턴스하여 김철수라는 객체를 만듦
getter/setter를 이용하여 김철수 인스턴스의 멤버변수 출력 및 수정
Student 김영희 = new Student();
getter/setter를 이용하여 김영희 인스턴스의 멤버변수 출력 및 수정
public | (default) | |
---|---|---|
표기 | public class 클래스명 | class 클래스명 |
사용범위 | 전체 | 같은 패키지 내 |
인스턴스 변수(iv) | 클래스 변수(cv, static 변수) |
---|---|
- 필드에 작성된 일반 변수 | - 필드에 static 예약어와 함께 작성된 변수 |
- heap 영역에 메모리가 할당 | - static 영역에 메모리가 할당 |
- 객체가 생성될 때 마다 생성 | - 프로그램 실행 시 1회만 생성되는 변수 |
- 객체가 참조하는 변수가 없을 때 사라짐 | ==> 프로그램 실행시 static 메모리에 자동 할당되며, 프로그램 종료시 자동 소멸 |
- new 연산자에 의해서 객체가 생성될 때 메모리에 할당된다고 해서 인스턴스 변수라고 함 |
👉 지역 변수(lv) (멤버변수가 아님)
- 메소드 또는 제어문 안에서 선언된 변수
- stack 메모리 영역에 할당 되었다가, 메소드 종료시 소멸됨
<표현식> [접근제한자] [예약어] class 클래스명 { // 클래스 표현식 [접근제한자] [예약어] 자료형 변수명 [= 초기값]; // 필드 표현식 } ------------------------------------------------------------------ public class Academy { public int temp1; protected int temp2; int temp3; //접근제한자 생략 시 (default) private int temp4; //캡슐화 원칙으로 private 사용 }
<static(->cv)> * 같은 타입의 여러 객체가 공유할 목적의 필드에 사용 * 프로그램 시작시 static 영역에 자동으로 할당되는 멤버에게 적용 public class Academy { private static int temp1; }
<final(->상수)> * 하나의 값만 계속 저장해야 하는 변수에 사용 public class Academy { private final int TEMP1 = 100; // final 키워드가 붙은 필드명은 // 모두 대문자로 표기 private int temp4; }
① 생성자명은 클래스명과 반드시 동일해야 한다.
② 반환형(void, int ..)이 존재하지 않는다.
기본생성자 | 매개변수생성자 |
---|---|
[접근제한자] 클래스명(){....}; | [접근제한자] 클래스명 (매개변수) { this.필드명 = 매개변수; }; |
- 컴파일러가 자동으로 기본 생성자 생성 | - 객체 생성시 전달 받으 값으로 초기화 |
- 매개변수 생성자 작성시 컴파일러가 기본 생성자 생성 X | |
- 상속에서는 반드시 기본 생성자 사용 | |
- 오버로딩을 이용하여 작성 |
[접근제한자] [예약어] class 클래스명 { [접근제한자] 클래스명() { } [접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; } } ------------------------------------------------------------------ public class Academy { // 필드 private int studentNo; private String name; // 생성자 public Academy() {} // 기본 생성자 public Academy(int studentNo, String name) { //매개변수 있는 생성자 this.studentNo = studentNo; this.name = name; } }
👉 우리가 클래스를 참조하여 객체를 생성할 때 ex) Class = Student Student std1 = new Student(); //여기서 우측의 Student()가 생성자이다 // 기본생성자의 형태이고, 매개변수 생성자의 경우 new Studemt(매개변수) 이다