My footsteps

객체지향 / 초기화 / 생성자 / 상속 본문

국비수업/수업정리

객체지향 / 초기화 / 생성자 / 상속

밀김 2023. 3. 15. 10:17
728x90

 

 

 

 

 

 

 

 

 

- 구조화 : 비슷한 속성과 작업끼리 묶어서 관리하는것

 

- 캡슐화 : 외부에서 접근하지 못하고,수정하지 못하게 데이터를 보호하는것 (은닉) 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) + "]";
	}//오른쪽클릭>소스>투스트링

 

 

 

 

 

728x90

'국비수업 > 수업정리' 카테고리의 다른 글

git / 1  (0) 2023.03.17
캡슐상속  (0) 2023.03.16
객체지향 / 인스턴스 객체 생성과 호출과 스택  (0) 2023.03.14
성적관리 캡슐화  (0) 2023.03.13
성적관리 함수화 (객체 안에 배열과 인덱스 넣기)  (0) 2023.03.11