My footsteps
객체지향 / 초기화 / 생성자 / 상속 본문
- 구조화 : 비슷한 속성과 작업끼리 묶어서 관리하는것
- 캡슐화 : 외부에서 접근하지 못하고,수정하지 못하게 데이터를 보호하는것 (은닉) get,set(게터,세터)를 쓴다
함수를 통해서만 접근할수 있게 한다. (구조+함수)
- 함수의 고립화를 깨는(=바깥의 영향을 받는) 구조체와 같이 묶어놔야 유지보수에 용이하다
- 일을 분업화 하는 형태가 객체지향
- 객체지향 3대 요소 : 캡슐화 상속 다형성
- 초기화: 객체가 만들어지자마자!! 채워지고(만들어 지고 나서 채워지면 안됨), 한번 초기화 돼면 다시는 초기화가 되지 않아야됨, 함수를 호출하는 방식의 초기화도 안된다
- 모든 객체는 기본으로 초기화 값을 갖고 있다
- ( )도 함수임 ex)Exam exam = new Exam(); 하면 ( )는, public Exam() 함수를 자바가 자동으로 만들어줌
하지만, 이건 일반적인 함수가 아니라서 Exam을 함수의 이름이라고 할수 없다.
Exam()은 호출할수 있는 객체의 형식을 의미한다. 이런 함수를 생성자(객체 생성시 초기화를 담당) 라고 한다
- 생성자는 매개인자를 갖고 있을수도, 갖고 있지 않을 수도 있다
- 기본생성자: 알아서 기본으로 초기화값을 기본으로 갖고 있는
- 오버로드생성자: 매개인자를 전달하면서 어떤 값으로 초기화할지 직접 말해주는
- 초깃값을 그대로 쓰고 싶다면 기본생성자, 직접 값을 지정해주고 싶다면 오버로딩
- 오버로드를 생성하고 기본생성자를 호출하는 방식을 이용하는게 좋다
- 인자가 없으면 함수도 인자가 없어야 하고? 인자가 있으면 함수도 인자가 있어야 하나?
https://hyoje420.tistory.com/14
[Java]오버로딩 & 오버라이딩(Overloading & Overriding)
오버로딩(Overloading) 오버로딩(Overloading)이라는 뜻은 사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것
hyoje420.tistory.com
Exam exam = new Exam();
System.out.println(exam.total());//90출력
Exam exam1 = new Exam(10,10,10);
System.out.println(exam1.total()); //30출력
public int total() {
return kor+eng+math;//this.
}
public int total(int kor, int eng, int math) {
return kor+eng+math;//this.
}
public Exam() {
// kor = 2;
// eng = 1;
this(20,30,40); //Exam()이 아닌 public Exam(int kor, int eng, int math) 생성자 호출하면서 초기화
} //매개인자가 없어서 20,30,40이 계산되어서 90출력
public Exam(int kor, int eng, int math) {
this.kor = kor;
this.eng = eng;
this.math = math;
} //매개인자가 있어서 10,10,10을 받아서 30출력
- 데이터를 갖고 있는 데이터 캡슐, 그것들을 출력해주는 UI캡슐이 존재
- 캡슐들을 엮는것 = 상속
SET 은 변수값을 할당하는 목적의 함수이기 때문에 인자를 받아야 하고,
GET 은 변수값을 반환하는 목적이기 때문에 return 이 필요하다.
public static void main(String[] args) {
Student stul = new Student();
String str = stul.toString();
System.out.println(str);
public class Student {
private int id; //0초기화
private String name; //null초기화
private Exam[] exams; //null초기화
//컨트롤+스페이스 누르면 생성자 자동생성
public Student() {
this(0,null); //id와name의 기본값을 넣어준다
}
public Student(int id, String name) {
this.id = id;
this.name = name;
this.exams = new Exam[4];
}//오른쪽클릭>소스>제너럴 컨스트럭트 유즈 필드 하면 인자가 있는 생성자 자동 생성
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Exam[] getExams() {
return exams;
}
public void setExams(Exam[] exams) {
this.exams = exams;
}//오른쪽클릭>소스>게터
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", exams=" + Arrays.toString(exams) + "]";
}//오른쪽클릭>소스>투스트링
'국비수업 > 수업정리' 카테고리의 다른 글
git / 1 (0) | 2023.03.17 |
---|---|
캡슐상속 (0) | 2023.03.16 |
객체지향 / 인스턴스 객체 생성과 호출과 스택 (0) | 2023.03.14 |
성적관리 캡슐화 (0) | 2023.03.13 |
성적관리 함수화 (객체 안에 배열과 인덱스 넣기) (0) | 2023.03.11 |