기본형은 공유하지 않는다. 참조형만 자료를 공유함.
6.29(목)
데이터 구조 정의하기.
구조를 만들게 되면 "Flat 한 상태에서 -> 계층(layor)"이 생긴다.
클래스는 파일당 하다.
클래스는 대문자로 시작
객체는 new를 통해 만들어서 공간을 만들어야 한다.
객체를 생성하지 않고 사용하게 되면 "NullPointerError뜸!"
🟩 재귀함수
자기가 자기를 부르는 함수
stackoverflow errer
(?) Quic Sort(재귀함수를 이용한 정렬) 숙제!!!!!
장점 : 병렬작업을 할때는 일을 나눠서 할 수 있어서 좋다.
🟩 함수의 재사용
재사용이란?
- 소스코드 -> 컴파일 -> 배포코드
- 위에 3개 중에 재사용한다는 의미는 배포코드를 재사용한다는 의미이다.
- 자바에서는 ". class " 단위가 재사용되는 단위이다.
private(다른 클래스에서 접근하는 것을 불허함)/ public(다른 클래서에서 쓰는 것을 허가함)/
배포단위 : Exam.java/ ExamList.java -> compile -> zip압축 ->. jar(확장자 변경) ->. jar(자바 압축파일)
jar파일로 만든 후 라이브러리 추가하는법 다시 해보기 (만약 FileInputStream 같은 파일 경로를 지정하는 class파일이 있으면 경로를 사전에 잘 설정하고 생각해 보기.)
🟩 객체지향 프로그래밍(OOP-//Object Oriented Programming)
실 세계(real world)의 일들을 객체를 사용해서 모델링하고, 객체를 사용하지 않으면 불가능 혹은 무지 어려웠을 일들을 쉽게 처리하는 방법을 제공한다는 것입니다.
객체지향은 코딩이 아니고, 설계이다.
캡슐화/ 상속 추상화/ 다형성
함수는 외부데이터의 영향을 받지 않기 위해 지역변수를 사용했다.... 근데 문제가 생겼다! 지역변수가 구조화되면 문제가 생긴다. 구조화된 객체를 사용하는 함수는 객체의 구조를 변경에 아주 취약하다.
캡슐화를 하면 데이터 구조에 따른 코드의 수정법 위를 캡슐 범위로 한정할 수 있다.(캡슐 범위 내에서 오류가 나서 그 부분만 찾으면 된다.)
은닉성
객체지향의 캡슐화
데이터구조 + 함수구조
🟩 객체와 개체
개체 : 개별적으롤 나눌 수 있는 것 (비행기, 자동차, 사람)/ 종류명(Type)이 개체이다.
객체 : "B747"이라는 개체의 "왼쪽으로 날아가는 비행기" 객체
추상화된 이름, 개체, 객체 구분하기
객체의 속성이란?
모든 객체는 식별하기 위해 식별코드가 존재한다.
🟩 static 메서드와 instance 메서드
class안에 함수는 static 메서드(울타리 안에 있는 함수)
객체지향으로 만들어지면 instance메서드
Static Method는 받아오는 값(매개변수)이 있으니까 This를 사용할 수 없다.
Instance Method는 받아오는 값(매개변수)가 없으니까 This를 사용해서 받아온다.(This생략가능)
🟩 생성자 : 초기화를 위한 특별한 함수
1. 객체가 생성되자마자 무조건 제일 먼저 실행되어야 만 한다.
2. 생성될 때 단 한 번만 실행되어야 만 한다.
new Exam();
new Exam + ();//소괄호는 생성자를 호출했다는 것
//생성자를 안만들어주면 기본 생성자가 생성됨
public Exam{
private int kor;
private int eng;
private int math;
}
Exam exam = new Exam();
Exam exam = new Exam(1); //parameter
Exam exam = new Exam(1,6);
public Exam(){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
kor =3;
eng = 4;
math= 5;
}
public Exam(int a){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
kor =a;
eng = 4;
math= 5;
}
public Exam(int a, int b){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
kor =a;
eng = b;
math= 5;
}
🟩 생성자 오버로드
public Exam(){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
//this.kor=3;//사용한 적이 없어야 한다.
this(3,4,5);//이름이 없기때문에 this를 사용한다.
}
public Exam(int kor,int eng, int math){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
this.kor =kor;
this.eng = eng;
this.math= math;
}
🟩 캡슐에 역할부여와 플랫폼
캡슐화는 함수만 묶는 것이 아니라 역할을 주어지는 것.
Ex) Exam아 국어 성적 저장해~!
🟩 상속
객체의 분리와 결합(Has A 관계)
UI와 데이터 서비스는 분리하는 것이 바람직 하다.
Getter/Setter
용도 :
객체지향 프로그램의 구조
Dependency 의존성 = 도구라고 부른다
c를 b가 만들엇다
객체의 탈부착 관계(Associaton Has a 상속)
-------------------------------------------
1. Association: 파트타이머
부품(Exam) 클래스의 속성만 준비한 상태에서
필요에 의해 객체를 주입해야 하는데,
이때 setter(혹은 다른 이름의 만들어주는 메소드도 가능)
또는 생성자의 매개변수로 부품(Exam) 클래스의 객체를 생성하는 녀석
2. Aggregation: 파트타이머
Association이 일대다(배열)의 관계가 되면 이녀석
3. Composition: 정규직
제품 클래스(ExamConsole)의 객체가 만들어지면서
생성자에 의해 부품 클래스(Exam)의 객체가 동시에 만들어지는 녀석
(일대다, 일대일 구분 없음)
-------------------------------------------
Composition has a(일체형) : 객체를 A가 만들때 B객체가 같이 있는 것.(한번에 다 준비되어 있는 상태)
public class ExamConsole {
// has a 상속관계/ A(ExamConsole)가 B(Exam)를 가지고 있다.
// 누군가가 ExamConsole을 만들면 Exam이 자동으로 만들어 진다.
//Composition has a 관계
private Exam exam = new Exam();
}
Aggregation has a () : 그때 그때 필요할 때 만들어 두는 관계.(준비만 해두는 상태)
public class ExamConsole {
private Exam[] exams;
private int index;
public ExamConsole() {
int max = 3;
exams = new Exam[max];
index = 0;
}
}
Association has a(분리형) :
객체들은 관계가 있는데 다 이용관계이다.
Dependency Injection
어소시에이션>>어그리게이션 외부생성 장착
컴포지션 자체 내부에서 부품 생성
IS A 상속
틀을 이용해서(가지고) 만들었다.(프레임워크를 사용하는 관계)
메소드 재정의 Override 하기
'IT > JAVA' 카테고리의 다른 글
[Java] 제네릭(Generic) (1) | 2023.07.09 |
---|---|
[JAVA] ✏️ Boxing과 Unboxing (1) | 2023.07.09 |
[Java] 컬렉션(Collection) ? (1) | 2023.07.09 |
[Java] 함수 오버로드(overload) (1) | 2023.07.04 |
[Java]구조적인 프로그래밍(메서드) (2) | 2023.06.28 |