티스토리 뷰
2024.02.15.싱글톤 디자인 패턴 , static , 상속(Inheritance) , 생성자 , override , Object 클래스와 toString()
Ji@n 2024. 2. 15. 17:46
싱글톤 디자인 패턴 (sigleton design pattern)
: 클래스의 인스턴스를 오직 하나만 생성할 수 있도록 작성하는 설계 기법
1. 클래스는 자신 타입의 private static 변수를 선언
2. 생성자는 private 으로 선언
3. public static 메소드를 제공해서 인스턴스를 생성할 수 있도록 설계
처음 생성한 인스턴스는 변경이 불가능 (주소값이 같음)
싱글톤 디자인 패턴으로 설계해서 인스턴스를 생성한 두 가지 변수의 주소값이 같은 "캠핑장" 으로 출력
toilet2 의 내용을 "공연장" 으로 변경하고 읽어와보면 두 개 모두 static 이므로 두 가지 변수를 출력하면 "공연장" 으로 출력된다
상속(Inheritance)
BasicTV : 상위 클래스(super class), 부모 클래스(parent class),기본 클래스(base class)
SmartTV : 하위 클래스(sub class), 자석 클래스(child class),유도 클래스(derived class)

상속하기 방법 2 가지
1. 클래스명 옆에 extends 부모클래스명 작성하기
2. 자식 클래스를 만들 때 new > class > superclass 에서 설정하기
browse 를 클릭하고 부모클래스로 상속받고 싶은 클래스를 입력해서 클래스 생성하기
(클래스의 인스턴스 변수명). 하고 ctrl + space 를 누르면 부모클래스의 메소드를 사용할 수 있다
반대로 부모클래스가 자식 클래스의 메소드를 사용할 순 없음
Person : 부모 클래스
BusinessPerson : 자식 클래스
InheritMain01 : 메인문
super(); 이란 부모 클래스의 기본 생성자 호출 이다. 생략 가능함
그리고 super(name); 은 생략할 수 없음.
부모 클래스의 매개변수 생산자를 명시적으로 호출한 경우 생략 불가함
Phone : 부모 클래스
SmartPhone : 자식 클래스
InheritMain03 : 메인
매소드 재정의 (Override)
- 부모 클래스가 가지고 있는 메소드를 자식 클래스에서 재정의(다시 정의)
- 메소드의 리턴 타입, 이름, 매개변수 모두 부모 클래스와 일치해야 함
Animal : 부모 클래스
Cat : 자식 클래스
Dog : 자식 클래스
InheritMain04 : main문
부모클래스에서 메소드 선언
자식 클래스에서 override
메소드 명은 같으나 내용은 다름
여기도 override
main문에서 speak 메소드를 실행
상속 관계에서는 자동으로 형변환을 시켜줘서
배열에 저장가능하다
상속은 왜 필요할까 ?
- 유지보수 측면에서 필요하다.
여러 클래스가 공통된 속성과 동작을 가질 때, 한 번에 정의하고 필요한 클래스에서 상속받아 사용할 수 있다.
예를 들어
Animal 클래스와 Dog , Cat 클래스가 있다고 가정할 때, Animal 클래스에는 모든 동물들은 소리를 낸다! 는 특성과 행동을 정의할 수 있다.
이러한 특성과 행동을 Dog , Cat 클래스에서 중복해서 구현할 필요없이 Animal 클래스를 상속받아 사용하면 된다!
Java의 모든 클래스들의 부모, 조상은 Object 이다!
자바의 모든 클래스는 Object 클래스의 public 메소드들을 사용 가능하다
Object 클래스의 toString 메소드 => 패키지이름.클래스이름@참조값(주소값) 을 리턴한다
Person 클래스의 인스턴스를 생성하고 출력하기
Object 클래스의 toString 메소드 => 패키지이름.클래스이름@참조값(주소값) 을 리턴한다
다형성(polymorphism)
- 객체(인스턴스)를 여러 가지 타입으로 호출할 수 있는 것.
- 생성된 인스턴스를 가리키는(참조하는) 참조 변수를 선언할 떄,
생성된 인스턴스의 클래스 타입으로 변수를 선언할 수도 있고
그 부모 타입으로 변수를 선언할 수 있는 것
- 다형성의 장점
1. 배열을 사용할 때 부모 타입으로만 선언해도 그 배열에는 부모/자식 타입 모두 저장 가능
2. 메소드를 정의할 때 메소드의 매개변수나 리턴타입으로 부모 클래스 타입만
사용해도 부모/자식 타입 모두 매개변수나 리턴값으로 사용할 수 있음
Car : 부모 클래스
HybridCar : 자식 클래스
InheritMain06 : main문
부모클래스명 abc = new 자식클래스명(); 이라고 한다면,
자식클래스명의 객체를 생성하여 부모클래스명의 변수 abc에 할당하고 있다.
이는 자바에서는 가능한 것으로,
자식 클래스의 인스턴스가 부모 클래스 타입의 변수에 할당될 수 있다.
하지만 이런 경우에는 부모 클래스에만 정의된 메서드와 속성에만 접근이 가능하며, 자식 클래스에만 있는
메서드나 속성에는 접근할 수 없다.
'자식클래스명 abc = new 부모클래스명();' 의 경우는 안된다!
자식 클래스 라서 부모 클래스의 객체를 저장 ㄴㄴ
'백엔드 교육과정 > 2월' 카테고리의 다른 글
2024.02.19 _ String API (Wrapper,Date) (0) | 2024.02.19 |
---|---|
2024.2.16. Interface , 상속/다형성 (복습) (0) | 2024.02.16 |
2024.02.14_JRE,JVM,final 제한자,멤버 변수,지역 변수,static,HW4 (0) | 2024.02.14 |
2024.02.13_Class_constructor(생성자), Access(접근 제한), 캡슐화 (0) | 2024.02.13 |
2024.02.07_ 객체 지향 프로그래밍 , 메소드 , 클래스 (+ 객체, 인스턴스)(수정) (0) | 2024.02.07 |