(틀린 내용 있을수도 있음 )
(클래스 내에서 메서드를 정의할때) 메서드의 매개변수로 자손타입이 들어갈 수 있다 --> 다형성
부모 클래스가 있고, 오버라이딩해서 자손 클래스가 상속받은경우
메서드의 매개변수로 부모타입을 지정하면 자손 타입의 객체도 전달할 수 있다. --> 업캐스팅
모든 클래스의 조상 : object
만약에 Object타입 매개변수를 받는 메서드에서 Point 객체의 인스턴스에 접근하려면, 먼저
캐스팅을 통해 Object타입을 Point 타입으로변환해야 한다.
Object는 인스턴스 변수가 없음
Object 타입 변수는 어떤 객체든 참조할 수 있지만, 특정 클래스의 멤버에 접근하려면 해당 클래스 타입으로 명시적 형변환을 해야 한다.
명시적 형변환
1. 매개변수 타입이 Object 이므로, 메서드 내부에서 instanceof 연산자를 사용해 실제 타입이 Point인지 확인하고,
2. 맞으면 명시적 형변환을 통해 Point 타입으로 변환한다.
3. 변환된 객체를 사용해 인스턴스 변수에 접근한다.
예시
컬렉션 프레임웍
1.컬렉션이란 ?
--> 여러 객체 (데이터)를 모아놓은것
2. 프레임웍 : 정해진 프로그래밍 방식
--> 라이브러리(기능)+ 프로그래밍 방식 정해짐 -->생산성, 유지보수성 좋아짐
표준화. 정형화된 프로그래밍 방식
3. 컬렉션 프레임웍
-> 여러 객체를 다루는 정해진 프로그래밍 방식
객체 - 데이터 , 여러객체- 컬렉션, 다루는 - 다양한 클래스 제공 , 정해진 프로그래밍 - 표준화
4.컬렉션 클래스 : 다수의 데이터저장 가능 클래스 ex) Vector, ArrayList, /..
5. 목표 : 다루려는 데이터 의 특징에 맞는 저장방식 == 클래스 선택하기
6. 컬렉션 프레임웍의 핵심 인터페이스
1) List (저장순서 O, 중복O) - 구현한 클래스 : ArrayList,LinkedList, Stack, Vector ..
2) Set (순서X, 중복 X , 집합) - 구현 클래스 : HashSet, TreeSet ,...
3) Map (순서X, 키(중복X)와 값(중복O)의 쌍== 두개의 관련된 데이터 묶음) - 구현 클래스 : HashMap, TreeMap, HashTable, Properties..
4)List와 Set의 공통부분만 뽑은것 : Collection 인터페이스
기본생성자를 초기화하고 싶을때
-->예를들어 객체의 기본값을 설정하고 싶다. (1,1)로 하고 싶으면
1) (1,1)로 설정할 수 있는 다른 생성자를 만들고
2) 기본생성자에 this()로 이 생성자를 호출하는 코드를 넣는다.!
---예시
1. 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화된다.
2. 변수를 선언과 동시에 초기화하는것 -- 명시적 초기화
3. 가장 우선적으로 고려돼야 할 초기화 : 명시적 초기화 (이유 : 가장 기본적이고 간단)
4. (인스턴스)초기화 블럭이 생성자보다 먼저 수행된다.
5.지역변수는 사용 전 반드시 초기화
6. 인스턴스 변수의 초기화 순서 : 기본값- 명시적초기화- 초기화블럭- 생성자
7. 클래스 변수의 초기화 순서 : 기본값 - 명시적 초기화 - 초기화블럭
8. 지역변수는 자동 초기화 x 반드시 별도 초기화
9. 지역변수가 선언된 메서드가 종료되면 지역변수도 함께 소멸
10.메서드의 매개변수로 선언된 변수도 지역변수
* 기본 생성자와 매개변수를 갖는 생성자의 차이 ?
--> 기본 생성자 : 인스턴스 생성 후 직접 "명시적 초기화"
---> 매개변수를 갖는 생성자 : 인스턴스 생성과 동시에 초기화
예시
* 생성자간의 호출
예제
// 자동차 주문 받기
// 자동차 속성 : color, gearType, door
// 아무것도 안고르기 / 색만 고르기 / 셋다고르기 가능
//아무것도 안고르면 --> 매개변수 없음 //기본생성자 + 기본값은 어떻게 설정하지 ?셋다고르기 생성자 호출하기
// 색만 고르기 --> 매개변수 1개인 생성자 / 나머지 두개는 어떻게 고르지 ? 셋다고르기 생성자 호출해서 사용
// 셋다 고르기 --> 매개변수 3개인 생성자
-- Car 클래스를 만들어서
1. 인스턴스 변수 세개 color, gearType , door 만들기
2. 생성자 세개 만들기: 기본생성자, 매개변수가 color뿐인 생성자, 셋다 가지는 생성자
3. Car 객체 두개 만들고 Cartest클래스의 main에서 테스트하기
여기서 중요한 것은 세번째 생성자인 Car(String color, String gearType, int door)에서
this.color , this.gearType, this.door의 값을 지정 === 생성된 인스턴스의 변수들을 초기화하는 과정이라는 것이다.
this를 사용하는 이유 : 인스턴스 변수의 이름과 매개변수로 들어온 지역변수의 이름이 같아서 구분이 안가기 때문;
만약 이름이 다르면 굳이 사용 안해도 된다.
그렇지만 생성자의 매개변수로 인스턴스변수들의 초기값을 제공받는 경우가 많기 때문에
매개변수와 인스턴스변수의 이름을 다르게 하는 것보다 'this'를 사용해서 구분하는 것이 더 좋다.
'this'는 참조변수 == 인스턴스(자신)을 가리킨다. this를 통해 인스턴스의 멤버인 인스턴스변수에 접근할 수 있다.
static메서드는 this 사용 불가 (이유: static메서드는 인스턴스 생성 없이 호출될 수 있으므로 static메서드가 호출되었을때 인스턴스가 생성되지 않았을수도 있기 때문)
*인스턴스를 복사하는 방법 : 생성자의 매개변수로 클래스의 참조변수를 넘겨준다.
아까의 코드에 Car(Car c) 생성자를 추가했다.
여기서 color는 사실 this.color이고, gearType는 this.gearType이며, door는 this.door이다.
이유 --> 매개변수이름과 인스턴스 변수 이름이 다르므로 this를 생략한 것일뿐
생성한 인스턴스 의 인스턴스변수를 초기화하는 것이기 때문.
그런데 사실 주석처리한 코드보다 다른 생성자를 호출하는 this()코드가 더 좋은 코드이다.
무작정 새로 코드를 작성하는 것보다 기존의 코드를 활용할 수 없는지 고민해야 한다.
*인스턴스메서드는 항상 매개변수로 this가 숨겨져 있다.
따라서 매개변수 한개를 가지고도 두 점 사이의 거리를 구할 수 있다. 왜? -- 메서드를 호출한 객체의 좌표를 자동으로 사용할 수 있기 때문
this로
*static메서드는 매개변수 두개 필요
static메서드는 지역변수를 선언해서 사용할 수 있다.
언제 사용 ? 객체의 상태 변화에 아무런 영향 없고 객체 생성 없이 바로 이용 (생성할때도있음)
직관적
'패스트캠퍼스 백엔드 부트캠프 3기' 카테고리의 다른 글
[패스트캠퍼스 백엔드 부트캠프 3기] 9주차 (0) | 2025.02.14 |
---|---|
[패스트캠퍼스 백엔드 부트캠프 3기] 8주차 (0) | 2025.02.08 |
[패스트캠퍼스 백엔드 부트캠프 3기] 4주차 공부한 내용 (0) | 2025.01.13 |
[패스트캠퍼스 백엔드 부트캠프 3기] 3주차 정리 (0) | 2025.01.06 |
[패스트캠퍼스 백엔드 부트캠프 3기] 2주차 정리 (0) | 2024.12.29 |