Spring & Java
[7일차] [내일배움캠프 사전캠프] + 스타터 노트 작성하기 본문
● JAVA 2 - 5 final - 변하지 않는 값
키워드
● final - 값 변경 불가 또는 참조 변경 불가를 의미
● 상수 - 변하지 않는 값 ( static final) 로 선언하여 재사용
● 불변객체 - 내부 상태가 절대 변경되지 않는 객체 / 참조 변경을 막지만 내부 상태 변경은 막지 않음
static 으로 선언 하는 이유 (복습)
● 보통 상수는 여러 곳에서 값을 공유해 쓰일 목적으로 활용 됩니다.
● 인스턴스 변수를 static 없이 선언할 경우 인스턴스 마다 PI 값이 중복 저장 됩니다.
package chapter2.finalexample;
// final - 값 변경 불가 또는 참조 변경 불가를 의미
// final - (1) 변수는 변경이 불가능 하다.
// final - (2) 클래스는 상속할 수 없게 만든다.
// final - (3) 메서드는 수정할 수 없게 만든다.(오버라이딩 불가)
// 상수 - 변하지 않는 값 ( static final) 로 선언하여 재사용
// 상수 - (1) JAVA에서 상수는 대문자로 표현하는것이 관례
// 상수 - (2) 프로그램 실행중에 절대 변경되어서는 안되기 때문에 static final 키워드를 사용해 선언 한다.
// 상수 - (3) static으로 선언된 변수는 프로그램 시작시 한 번만 초기화 되고 모든 신스턴스에서 같은 값을 공유 한다.
// 불변객체 - 내부 상태가 절대 변경되지 않는 객체 / 참조 변경을 막지만 내부 상태 변경은 막지 않음
// 불변객체 (1) 기본형 변수가 아닌 참조형 변수이다.
// 불변객체 (2) 참조형 값에 따라 참조 값이 나온다.
// 불변객체 (3) 불변 객체의 내부 상태가 변경이 필요한 경우가 있다.
// 불변객체 (4) 변경이 필요한 경우 새로운 객체를 만들어야 합니다.
// 불변객체 예시) String, Integer, 래퍼클래스 등
// 키워드 ( final, 상수, 불변객체 )
public class Main {
public static void main(String[] args) {
// final 활용 방법
final int a = 1;
System.out.println("a = " + a);
// 상수 활용 방법
System.out.println("Circle.PI = " + Circle.PI);
// 불변 객체 활용
final Circle c1 = new Circle(2);// 참조형 변수 ( 참조가 값이 나온다. )
System.out.println("c1 = " + c1);
// 참초 변경을 막지만 내부 상태 변경은 막지 않습니다.
/*c1 = new Circle(5); */
// (3) - 불변 객체의 값의 변경이 필요한 경우
// (3-1) - 불변성을 유지 하면서 값을 변경하는 효과를 얻을 때 활용 합니다.
// (3-2) - 기존 객체의 상태를 직접 변경할 수 없기 때문에 새로운 객체를 생성 합니다.
// (3-3) - 생성자를 새로 호출하거나 아래의 기능을 활용할 수 있습니 다.
Circle c2 = new Circle(10); // 생성자
Circle c3 = c2.changeRadius(10); // 기능을 활용
}
}
// Q. 불변 객체 키워드 3가지를 설명 하시오
// ( fianl, 불변 객체, 상수 )
// Q. 불변 객체 내부 상태의 변경이 필요한 경우를 설명 하시오
// Circle에 c2 라는 새로운 생성자를 만듭니다. 생성자의 변수는 changeRadius 값으로 내부 값을 변경 할 수 있습니다.
package chapter2.finalexample;
public class Circle {
//속성
final static double PI = 3.14159;
/*final static double PI - 3.14159;*/ // > 원주율
double radius;
// > 내부 변경을 막을려면 모든 속성 앞에 final을 쓰는게 맞다.
//생성자
Circle(double radius) {
this.radius = radius;
}
// 기능 (3) - 불변 객체의 내부 상태를 변경 할 수 있는 경우
// 반환 데이터 값 - Circle
Circle changeRadius(double newRadius){
return new Circle(newRadius); // 생성자 호출
}
}
불변 객체의 값의 변경이 필요한 경우
● 불변성을 유지 하면서 값을 변경하는 효과를 얻을 때사용 합니다.
● 기존 객체의 상태를 직접 변경할 수 없기 때문에 새로운 객체를 생성합니다.
● 생성자를 새로 호출하거나 아래의 기능을 활용할 수 있습니다.
● JAVA 2 - 6 Interface - 표준화의 시작
학습 키워드● 인터페이스 - 클래스 설계 기준 ● 구현체 - 인터페이스를 구현한 클래스● 인터페이스 변수 ● 인터페이스 다중상속● 인터페이스 다중구현
package chapter2.interfaceexpample;
// 인터페이스 - 클래스 설계 표준
// 구현체 - 인터페이스를 구현한 클래스
// 인터페이스 (1) 인터페이스는 설계 표준 이다.
// 인터페이스 (2) 클래스가 따라야할 최소한의 공통 규칙을 정의하는 역할을 한다.
// 인테페이스를 사용하는 이유
//(1) 모든 설계에 표준이 있는 이유와 똑같다.
//(2) 개발자마다 서로 다른 방식으로 메서드를 만든다면 일관성이 깨질수 있다.
//(3) 인터페이스를 활용해서 최소한의 규격을 정의한다.
//(4) 세부 구현은 각 클래스에 맡긴다.
//(5) 일관성을 유지 하면서 클래스가 고유한 특색을 확장할 수 있도록 돕는다.
// 인터페이스는 일관성을 유지하는게 중요하고 세부 구현은 각 클래스에 맡기는게 중요하다.
// 옵션 + 엔터 ( alt + enter )
// 인터페이스에 변수를 선언 하는 경우 -- 표준값이 어긋날 수 있어서 추천은 안함
// (1) public staic fianl로 선언 된다.
// (2) static 으로 선언 되기 떄문에 구현체 없이도 활용 가능하다.
// (3) 인터페이스는 표준의 역할임으로 변수 선언은 최소화 하는것이 좋다.
// 예시 ) int POPULATION = 100; ( config class )
// 예시 ) main > 바로 사용 가능
public class Main { // 자동차를 만드는 회사가 2개 있다. ( class : (a)LuxuryCar , (b)speedCar )
public static void main(String[] args) {
// 인스턴스화
// 각 클래스를 만들고 new 로 클래스를 호출 하는것이 인스턴스화
LuxuryCar luxuryCar = new LuxuryCar();
SpeedCar speedCar = new SpeedCar();
// 인터페이스 활용 - 일관성이 있을수 있게 사용 하는 것이 Interface.
luxuryCar.move();
speedCar.move();
luxuryCar.stop();
speedCar.stop();
luxuryCar.charge();
speedCar.autoPakring();
}
}
오늘의 TIL : 공부하고 있는 방식 중 잘되고 있는점과 개선이 필요한 점을 기록 하자.기록 : 과정이 심화 될 경우 코드 분석을 하기 위한 나는 "도구"를 찾는 것이지 답을 찾는 사람은 아직 아니라는 것을 알게 되었고, 모든 과정을 반복 학습을 통해서 완전히 내것으로 만드는데 집중 하는게 맞다고 생각 됩니다.코드라는건 결국 보여주기 위한 하나의 도구일 뿐인데 너무 깊게 생각하지 말고 암기를 통해 사용 할 수 있는 나만의 코드를 설계 해보는게 목표 입니다.
'내일배움캠프 사전 학습' 카테고리의 다른 글
| 카테고리 없음[8일차] [내일배움캠프 사전캠프] + 스타터 노트 작성하기 (0) | 2025.11.20 |
|---|---|
| [6일차] [내일배움캠프 사전캠프] + 스타터 노트 작성하기 (0) | 2025.11.17 |
| [5일차] [내일배움캠프 사전캠프] + 스타터 노트 작성하기 (0) | 2025.11.14 |
| [5일차] [내일배움캠프 사전캠프] + 반복문 숙제 (0) | 2025.11.14 |
| [4일차] [내일배움캠프 사전캠프] + 스타터 노트 작성하기 (0) | 2025.11.13 |