일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- Scanner
- 자동형변환
- Short
- bootstrap
- https://start.spring.io
- 언박싱
- wrapper
- 콜렉션
- 박싱
- 인텔리제이
- 메소드
- Java
- 제네릭
- 싱글턴
- start.spring.io
- 무한
- 루프
- 내장객체
- 컬렉션
- maven
- unboxing
- suvlet
- 제너릭
- 스프링
- dependency
- boxing
- 빌드
- Jenkins
- 싱글톤
- 클래스
Archives
- Today
- Total
Developer Gonie
[3주차] 56. 이너클래스(=중첩클래스), 클래스 내부에 선언한 클래스 본문
* 이너클래스(=중첩클래스, Nested class) 란?
클래스 내부에 선언한 클래스를 말함.
클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나,
특정 클래스 하고만 관계를 맺을 경우에는 관계클래스 내부에 선언하는 것이 좋다.
이너클래스 관련해서 주의할 점으로 이너클래스 타입의 객체는 바로 new 를 이용해 객체를 생성하는 것이 불가능 하다.
그 이유는 이너클래스의 생성자에 바로 접근이 불가하기 때문인데 그래도 방법은 있다! 바깥 클래스의 객체를 생성하여
이너클래스의 생성자에 접근하면 아래와 같이 객체를 생성하는 것이 가능하다
Car2 pride = new Car2("프라이드", 2005, "파랑");
Car2.Car2name pride2 = pride.new Car2name("프랑이", 2009);
pride2.Outcolor(); // model:프랑이 연식:2009 색상:파랑입니다.
이너클래스에 대한 개념은 알아두더라도 잘 사용하지는 않는 기능이라고 함.
중첩클래스 적용하지 않은 예시
class CarName {
String model;
int year;
CarName(String model, int year) {
this.model = model;
this.year = year;
}
}
class Car {
CarName name;
String color;
Car(String model, int year,String color) {
this.name = new CarName(model,year);
this.color = color;
}
void OutInfo() {
System.out.printf("모델 = %s, 년식 = %d, 색상 = %s\n",
name.model, name.year, color);
}
}
public class Ex07_06_이너사용안함 {
public static void main(String[] args) {
CarName sonata = new CarName("소나타", 2009);
System.out.printf("모델 = %s, 년식 = %d\n", sonata.model, sonata.year);
Car pride = new Car("프라이드", 2015, "파랑");
pride.OutInfo();
}
}
모델 = 소나타, 년식 = 2009
모델 = 프라이드, 년식 = 2015, 색상 = 파랑
중첩클래스를 적용한 예시
class Car2 {
Car2name name;
String color;
Car2(String model, int year, String color) {
name = new Car2name(model, year);
this.color = color;
}
// 클래스 내부에 선언한 중첩클래스
class Car2name {
String model;
int year;
Car2name(String model, int year) {
this.model = model;
this.year = year;
}
Car2name(String model, int year, String col) {
this.model = model;
this.year = year; // 내부 클래스에서의 this는 내부 클래스의 멤버변수에 접근하게 됨
color = col; // this를 사용하지 않으면 바깥 클래스의 변수를 사용하게 됨
}
void innerInfo() {
System.out.println("model:" + model + " | 연식:" + year + " | 색상:" + color + "입니다.");
}
}
void outInfo() {
System.out.printf("모델=%s | 년식=%d | 색상=%s\n", name.model, name.year, color);
}
}
public class Ex07_07_InstanceInner {
public static void main(String[] args) {
Car2 pride = new Car2("프라이드", 2005, "파랑");
pride.outInfo(); // 모델=프라이드 | 년식=2005 | 색상=파랑
pride.name.innerInfo(); // model:프라이드 | 연식:2005 | 색상:파랑입니다.
System.out.println();
// 이너클래스의 생성자를 이용해서 객체 생성해보기
// Outer클래스.Inner클래스 변수명 = Outer클래스객체.new Inner클래스(생성자 인수)
Car2.Car2name pride2 = pride.new Car2name("프랑이", 2009);
pride2.innerInfo(); // model:프랑이 | 연식:2009 | 색상:파랑입니다.
System.out.println();
Car2.Car2name pride3 = pride.new Car2name("노란프랑이", 2015, "노랑");
pride3.innerInfo(); // model:노란프랑이 | 연식:2015 | 색상:노랑입니다.
System.out.println();
pride.outInfo(); // 모델=프라이드 | 년식=2005 | 색상=노랑
pride.name.innerInfo(); // model:프라이드 | 연식:2005 | 색상:노랑입니다.
}
}
모델=프라이드 | 년식=2005 | 색상=파랑
model:프라이드 | 연식:2005 | 색상:파랑입니다.
model:프랑이 | 연식:2009 | 색상:파랑입니다.
model:노란프랑이 | 연식:2015 | 색상:노랑입니다.
모델=프라이드 | 년식=2005 | 색상=노랑
model:프라이드 | 연식:2005 | 색상:노랑입니다.
'K-DigitalTraining 강의 > 1. Java' 카테고리의 다른 글
[3주차] 58. Object 클래스에 존재하는 equal(), toString() 메소드 오버라이딩*** (0) | 2022.06.02 |
---|---|
[3주차] 57. 익명클래스, 존재하는 클래스의 메서드를 1회성으로 오버라이딩 혹은 새로운 메소드를 추가해서 사용. 혹은 인터페이스 혹은 추상클래스의 미완성된 추상메소드를 완성 (0) | 2022.06.02 |
[2주차] 55. 난수, 1~100 사이의 정수 난수를 반환받는 방법 (0) | 2022.06.02 |
[2주차] 54. 예외처리, throw를 이용해 강제로 예외 발생시키기 (0) | 2022.06.02 |
[2주차] 53. 예외처리, throws를 이용해 예외를 다른 곳에서 처리하기 (0) | 2022.06.01 |
Comments