일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- spring서버
- JPA
- uncheck Exception
- jpa회원가입
- 복합키
- queryDSL
- REST API 규칙
- Filter
- REST란
- 스프링 부트 기능
- @IdClass
- JPA주의사항
- Unsatisfied dependency
- ERD 작성
- jpa에러
- 최종 프로젝트
- git
- 1차캐시
- json
- JoinColumn
- json gson 차이
- 스프링 부트 공식 문서
- Q 클래스
- Error creating bean with name
- github
- Spring Spring boot 차이
- jwt메서드
- 빈생성안됨
- 인텔리제이
- 스프링부트오류
- Today
- Total
Everyday Dev System
0523_TIL : Java 3주차 강의에서 새로 알게된 것 본문
#새롭게 알게된 것들 :
1. 가변길이의 매개변도 선언 가능
void carSpeeds(double ... speeds) {
for(double v : speeds) {
System.out.println("v= " + v);
}
}
carSpeeeds(100,200,300);
2. 참조형 매개변수는 주소값이 넘어오므로 값이 변경됨.
** 기본형 매개변수는 주소값이 아니라 값을 복사해서 넘겨주는 것이므로 원본데이터에 영향x
package org.example.week3.parameter;
public class Main {
public static void main(String[] args) {
Car car = new Car(); // 객체 생성
// 기본형 매개변수
char type = 'D';
car.brakePedal(type);
// 메서드 실행 완료 후 전달할 매개값으로 지정된 type 값 확인
System.out.println("type = " + type); // 기존에 선언한 값 'D' 출력, 원본 값 변경되지 않음
// 메서드 실행 완료 후 반환된 car 인스턴스의 gear 타입 확인
System.out.println("gear = " + car.gear); // 객체 내부에서 type을 변경하여 수정했기 때문에 'P' 출력
System.out.println();
// 참조형 매개변수
Tire tire = new Tire();
tire.company = "금호"; // 금호 타이어 객체 생성
// 차 객체의 타이어를 등록하는 메서드 호출한 후 반환값으로 차 객체의 타이어 객체 반환
Tire carInstanceTire = car.setTire(tire);
// 메서드 실행 완료 후 전달할 매개값으로 지정된 참조형 변수 tire의 company 값 확인
System.out.println("tire.company = " + tire.company); // "KIA" 출력
// 전달할 매개값으로 지정된 tire 인스턴스의 주소값이 전달되었기 때문에 호출된 메서드에 의해 값이 변경됨.
// 메서드 실행 완료 후 반환된 car 인스턴스의 tire 객체 값이 반환되어 저장된 참조형 변수 carInstanceTire의 company 값 확인
System.out.println("carInstanceTire.company = " + carInstanceTire.company); // "KIA" 출력
}
}
3. 인스턴스 멤버 & 클래스 멤버
- 선언하는 방법이 상이함.
- 인스턴스 멤버는 객체 생성 후에 사용가능, 클래스 멤버는 객체 생성 없이도 사용 가능
모든 객체의 인스턴스 필드는 각각의 인스턴스마다 고유한 값을 가짐.
- 클래스 멤버
클래스는 java의 클래스 로더에 의해 메서드 영역에 저장되고 사용되어 고정적인 위치를 차지한다.
필드와 메서드를 클래스 멤버로 만들기 위해서는 static 키워드 사용
클래스 멤버 사용방법 - 클래스 이름으로 접근하는 것이 좋다!!
Car.company = "Audi";
// 안좋은 접근법
Car car = new car();
car.company = "Ferrari";
4. main에는 기본 생성자가 내장되어 있어서 인스턴스화가 가능하다.
package org.example.week3.sample;
public class Main {
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.getNumber());
}
public int getNumber() {
int number = 1;
number += 1;
return number;
}
}
5. final로 선언된 상수는 변수명 모두 대문자로 해야 함.
ex) INT_VALUE
6. 부모 클래스에 final이 붙으면 최종적인 클래스가 됨으로 더 이상 상속할 수 없는 클래스가 된다.
7. 자식 클래스와 부모클래스 형변환
부모 클래스가 Mammal, 자식 클래스가 Whale
Mammal mammal = new Whale();
mammal.swimming(); // 오류 발생
# 이유 : swimming 메서드는 자식 클래스에만 선언이 되어 있으므로, Mammal 타입의 mammal 인스턴스는 swimming을 사용할 수 없다. 즉, 부모 클래스에 swimming 메서드가 없어서 사용 불가
Whale whale = new Mammal(); // 오류 발생
자식 클래스가 더 작기 때문에 부모 클래스 타입의 캑체는 자식타입의 병수로 변환 불가.
** 예외적으로 위 Mammal mammal = new Whale()과 같이 자동형변환이 완료된 애들만 다시 자식 클래스로 형변환이 가능하다.
8. 인터페이스 주의사항
- 모든 멤버변수는 public static final 이어야 한다.
- 모든 메서드는 public abstract 이어야 한다.
- 인터페이스의 추상 메서드는 구현될 때 반드시 오버라이딩 되어야 한다.
- 만약 인터페이스의 추상 메서드를 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경
- 인터페이스 간의 상속은 extends 키워드 사용!
* 일반 클래스는 다중 상속 불가
public class Main implements C {
@override
public void a() {
System.out.println("A");
}
@override
public void b() {
System.out.println("B");
}
}
interface A {
void a();
}
interface B {
void b();
}
interface C extends A, B { }
public class 클래스명 implements 인터페이스명
'내배캠 주요 학습 > TIL : Today I Learned' 카테고리의 다른 글
0524_TIL : 인터페이스 자동 형 변환 (0) | 2023.05.24 |
---|---|
0523_TIL : Iterator 필요성 (1) | 2023.05.23 |
0523_TIL : Java 2주차 강의에서 새로 알게된 것 (0) | 2023.05.23 |
0519_TIL : 파이썬 MongoDB 연동 (0) | 2023.05.23 |
0522_TIL : nextFloat() 문자열 입력 오류 해결 (0) | 2023.05.23 |