티스토리 뷰

 

싱글톤 디자인 패턴 (sigleton design pattern) 
: 클래스의 인스턴스를 오직 하나만 생성할 수 있도록 작성하는 설계 기법

 

1. 클래스는 자신 타입의 private static 변수를 선언 

2. 생성자private 으로 선언 

3. public static 메소드를 제공해서 인스턴스를 생성할 수 있도록 설계
    처음 생성한 인스턴스는 변경이 불가능 (주소값이 같음)

 

publictoilet 클래스

 

AccessMain

싱글톤 디자인 패턴으로 설계해서 인스턴스를 생성한 두 가지 변수의 주소값이 같은 "캠핑장" 으로 출력 

 

main 실행

 

toilet2 의 내용을 "공연장" 으로 변경하고 읽어와보면 두 개 모두 static 이므로 두 가지 변수를 출력하면 "공연장" 으로 출력된다

main 출력

 

 


 

 

상속(Inheritance)

BasicTV : 상위 클래스(super class), 부모 클래스(parent class),기본 클래스(base class)

SmartTV : 하위 클래스(sub class), 자석 클래스(child class),유도 클래스(derived class)

 

 

부모클래스인 BasicTv

 

자식 클래스인 SmartTv

상속하기 방법 2 가지 

1. 클래스명 옆에 extends 부모클래스명 작성하기 

 

2. 자식 클래스를 만들 때 new > class > superclass 에서 설정하기

 

browse 를 클릭하고 부모클래스로 상속받고 싶은 클래스를 입력해서 클래스 생성하기

 

 

 

 

 

main()

 

 

(클래스의 인스턴스 변수명). 하고 ctrl + space 를 누르면 부모클래스의 메소드를 사용할 수 있다

반대로 부모클래스가 자식 클래스의 메소드를 사용할 순 없음

 

 

 

 


 

 

읽어만 보기 ..

 

Person : 부모 클래스 

BusinessPerson : 자식 클래스

InheritMain01 : 메인문 

 

Person

 

 

BusinessPerson

super(); 이란 부모 클래스의 기본 생성자 호출 이다. 생략 가능함

그리고 super(name); 은 생략할 수 없음.

부모 클래스의 매개변수 생산자를 명시적으로 호출한 경우 생략 불가함 

 

main02

 


 

Phone : 부모 클래스 

SmartPhone : 자식 클래스 

InheritMain03 : 메인 

 

Phone 클래스
SmartPhone
Main03


 

매소드 재정의 (Override)

- 부모 클래스가 가지고 있는 메소드를 자식 클래스에서 재정의(다시 정의)

- 메소드의 리턴 타입, 이름, 매개변수 모두 부모 클래스와 일치해야 함

 

Animal : 부모 클래스

Cat :  자식 클래스 

Dog : 자식 클래스

InheritMain04 :  main문

 

부모클래스 Animal

부모클래스에서 메소드 선언 

자식클래스 Dog

 

자식 클래스에서 override 

메소드 명은 같으나 내용은 다름 

자식 클래스 Cat

 

여기도 override 

 

main04

 

main문에서 speak 메소드를 실행

main04

 

상속 관계에서는 자동으로 형변환을 시켜줘서 

배열에 저장가능하다 

 

상속은 왜 필요할까  ? 

- 유지보수 측면에서 필요하다.
여러 클래스가 공통된 속성과 동작을 가질 때, 한 번에 정의하고 필요한 클래스에서 상속받아 사용할 수 있다.

예를 들어
Animal 클래스와 Dog , Cat 클래스가 있다고 가정할 때, Animal 클래스에는 모든 동물들은 소리를 낸다! 는 특성과 행동을 정의할 수 있다.
이러한 특성과 행동을 Dog , Cat 클래스에서 중복해서 구현할 필요없이 Animal 클래스를 상속받아 사용하면 된다!

 

main04 출력

 


Java의 모든 클래스들의 부모, 조상은 Object 이다! 
자바의 모든 클래스는 Object 클래스의 public 메소드들을 사용 가능하다

 

Person 클래스의 toString

 

Object 클래스의 toString 메소드  => 패키지이름.클래스이름@참조값(주소값) 을 리턴한다

 

 

Person 클래스의 인스턴스를 생성하고 출력하기

 

Object 클래스의 toString 메소드  => 패키지이름.클래스이름@참조값(주소값) 을 리턴한다

 


다형성(polymorphism)
- 객체(인스턴스)를 여러 가지 타입으로 호출할 수 있는 것.
- 생성된 인스턴스를 가리키는(참조하는) 참조 변수를 선언할 떄,
  생성된 인스턴스의 클래스 타입으로 변수를 선언할 수도 있고
  그 부모 타입으로 변수를 선언할 수 있는 것

- 다형성의 장점
1. 배열을 사용할 때 부모 타입으로만 선언해도 그 배열에는 부모/자식 타입 모두 저장 가능
2. 메소드를 정의할 때 메소드의 매개변수나 리턴타입으로 부모 클래스 타입만
    사용해도 부모/자식 타입 모두 매개변수나 리턴값으로 사용할 수 있음

 

Car : 부모 클래스 

HybridCar : 자식 클래스 

InheritMain06 : main문

 

 

Car 클래스

 

 

HybridCar 클래스

 

main()

 

부모클래스명 abc = new 자식클래스명(); 이라고 한다면,
자식클래스명의 객체를 생성하여 부모클래스명의 변수 abc에 할당하고 있다.
이는 자바에서는 가능한 것으로,
자식 클래스의 인스턴스가 부모 클래스 타입의 변수에 할당될 수 있다.
하지만 이런 경우에는 부모 클래스에만 정의된 메서드와 속성에만 접근이 가능하며, 자식 클래스에만 있는
메서드나 속성에는 접근할 수 없다.



'자식클래스명 abc = new 부모클래스명();' 의 경우는 안된다!
자식 클래스 라서 부모 클래스의 객체를 저장 ㄴㄴ

 

 

 

 

 


 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함