프로그래밍은 절차지향과 객체지향이 있다.
절차지향은 코드들간의 결합이 강하다.
장점 : 실행 속도가 빠르다.
단점 : 유지보수가 힘들다.
객체지향은 코드 마다 기능이 가능하다.
장점 : 코드 하나의 문제가 발생해도 문제코드만 해결하면 실행이 된다.
예를들어 절차지향은
학생이라는 프로그램을 실행하면 밥을 먹고, 버스를 타고, 학교를 가야 하는 절차를 거쳐 프로그램이 실행된다.
객체 지향은 학생을 실행했을 때 밥 대신 빵(대체코드)을 먹어도 되고, 버스 대신 택시를 타도 되며, 학교를 가지 않아도 실행이 된다.
객체 지향에서는 프로그램 하나하나를 모두 독립된 인격으로 인식.
컴퓨터를 객체로 보면
컴퓨터객체 = 본체객체 + 모니터 객체 + 키보드객체 + 마우스객체
로 이루어 져있다. 즉, 컴퓨터는 객체들이 모인 객체 이다.
dog객체에서 만들어진 메서드는 해당 객체에서만 수행할수 있다.
클래스란 객체를 만들기위한 설계도.
클래스로부터 만들어진 객체(설계도에 의해 생성된 제품)를 해당 클래스의 인스턴스(instance)라고 부른다.
하나의 클래스로 여러 개의 인스턴스를 만들 수 있다.
예를 들어 철수는 대걸레를 만드는 기술을 가지고 있고, 철수만이 대걸레를 만들수 있다.
이런 철수의 기술을 설계도로 만들었다. = 클래스
철수만 만들 수 있던 대걸레를 설계도를 볼줄 아는 사람은 누구나 만들수 있게 되어 기술자가 대걸레를 만들었다.
대걸레 = 인스턴스
대걸레 사용량이 늘어 공장에 설계도를 주었고, 하루에 100개씩 생산을 하였다.
클래스(설계도) -> 인스턴스(대걸레) -> 여러개를 만들수 있다.
이 때 만들어진 대걸레는 각가 독립된 제품 이 된다.(생성된 인스턴스는 각각 독립되어 있다.)
설꼐도 X -> 설계도
속성은 filed!
속성은 변수형태로 표현된다.
ex) String model;
속성을 2가지로 구분
- 잘 바뀌지 않는 정보는 고유속성.
- 자주 변하는 것들은 상태속성.
객체 안에 객체를 만들 수 있다.
받은 문자를 배열 형태의 속성으로 표현 이때 배열의 길이는 3 (기본값)
boolean on 의 기본값은 false 이다.
powerOn() = true;
powerOff() = false; 이므로
if ( !on ) = on 이 false 이면 true 가 되어 if문 실행
즉, false 일때 전원을 켜라는 메시지와 함께 리턴=탈출.
================ ↑ 설계도 작성 완료 = Phone class 작성완료================
================ ↓ instance만들기 =================================
실행 클래스의 이름은 PhoneFactory
설계도를 통한 핸드폰 만들기
instance!
new로 설계도 호출 = new Phone(설계도이름)
new Phone();를 하여 폰을 만들때 이 폰을 변수에 담아야 한다.
이때 변수의 데이터 타입을 정해야 하는데
int boolean String 등 많은 Phone 클래스에는 많은 데이터 타입이 존재하고 그러한 데이터 들을 모은게 instance 이기 때문에 참조타입의 변수에 새로운 객체를 저장시킨다.
참조 타입은 설계도인 class의 이름과 동일하게 한다.
새로만든 Phone인 galaxy의 필드 값 수정 가능.
ex)
galaxy.model = "겔럭시21";
설계도에서 생성자 Phone을 만들었다.
폰을 생성했을 때 속성이 모두 기본 값이 것을 확인 할 수 있다.
생성자 - 기술자가 폰을 만들때 속성을 초기화 할 수 있다. (속성에 값을 주고 만들 수 있음)
폰 속성이 타입의 기본값에서 최초 설정한 값으로 변경 된 것을 확인 할 수 있다.
Phone(); = 1번 생성자가 만든 폰의 모델이 마음에 들지 않을 때
1번 생성자가 만드는 애니콜 폰 말고 다른 것을 만들수 있는 기술사 즉 생성자를 만들면 된다.
1번 생성자 말고 또 다른 생성자를 만드는 것을 오버로딩이라고 한다.
(생성자 중복 선언)
오버로딩 할때 Phone() <- 생성자 이름이 같아서 에러가 발생
오버로딩을 할때는 매개변수가 달라야 한다.
2번 생성자의 매개변수에 모델명을 입력하면 입력된 모델명의 폰이 생성된다.
3번 생성자가 필요했다. (오버로딩), 매개변수를 다르게 설정
4번 생성자가 필요해졌다.
== 아래는 연습.==
=============== ↑instance 와 생성자 =========================
=============== ↓객체추가 설명과 객체 활용 예시(메시지 보내기)==========================
1번 폰이랑 2번폰은 별개의 객체라는 것을 설명.
1번 폰의 전원을 끄고 정도 확인했을 때 1번은 출력이 안된다에서 정도는 무슨 생각으로 오타를 낸건지 모르겠네여..;
p1 변수와 p2 변수는 stack에 저장. (p1과 p2 변수의 타입은 Phone 이다.)
많은 정보를 담고 있는 위 2변수를 stack에 보관하면 용량 초과가 발생할수 있다.
생성된 객체의 filed는 stack에 저장되지 않고 Heap에 저장된다.
p1과 p2는 각 객체 filed의 주소값이 저장되어 데이터를 꺼낼때 그 주소로 접근하여 작업을 수행한다.
p1과 p2의 주소가 다르다 즉 다른 객체.
Phone class에서 만든 sendMessage() 메서드. (메시지를 보내는 기능을 한다.)
- 메시지를 보내는 프로그래밍 문법과 비슷한 예시.
속성에 만들어 놨던 메시지함.
받은 문자를 카운터 하는 속성.
메시지 카운터함의 배열 길이를 3으로 설정해놨었다.
if문 해석 =
만약 메시지를 보내려고하는 폰의 메시지함 길이가 (3) 메시지 받은 카운터 보다 크면 메시지함이 비어 있다!
//상대방 메시지함에 메시지 넣기
몇번째 인덱스에 넣어야 하나.
이 때 수업 쫓아가느라고 정신없는데 빨간줄 안없어져서 같이 실습도 못해보고 아주 죽을맛이었넹 ㅠ
======== 클래스에서 만든 메서드 잘 작동되나 확인 =====================
은행이라는 객체는
통장을 개설해주러 오는 경우
새로운 계좌 객체를 생성해 줘야 한다.
설계도에서 만든 메서드는
생산부에서 객체생성 없이 사용이 안된다.
== 여기까지 5월 26일 목요일 오전 3시간 강의== 아 너무 어렵넹 ㅠ
'JAVA' 카테고리의 다른 글
java_객체와 클래스( 연습)_22.05.26(day7) (Review1) (0) | 2022.05.26 |
---|---|
java_객체와 클래스(필드변수와 지역변수)_22.05.26(day7) (review1) (0) | 2022.05.26 |
java_메서드(함수만들기_연습)_22.05.25(day6) (0) | 2022.05.25 |
java_메서드(개념)_22.05.25(day6) (0) | 2022.05.25 |
java_ScannerProblem_22.05.24(day5) (0) | 2022.05.24 |