Govern/Eclipse SE -설치,문장,배열

07-16(금) static / 싱글톤

Mary's log 2021. 7. 16. 09:36

※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.


책 127쪽

6. this 키워드

 

프로젝트 06Day_0_this


자, 이제, 단축키로 한꺼번에 만들거임

 

코드창에서 " 마우스 오른쪽 키 " or " Alt + Shitft + S

 

ㄴ이건 Constructor using Fields 필드를 이용해서 생성자를 만든다

ㄴ이건 toString

ㄴ겟셋 함수는 일케 변수 선택해서 만들 수 있음

 

 

 

프로젝트 06Day_1_method3_start

 


책132쪽

7. package와 import

┌ 패키지 이름 그대로 임포트┐

┌ Random 상수? 만드는  자바.유틸리티 임포트┐

┌ 날짜 Calendar 자바.유틸리티 임포트┐

 

┌ 최종적으로 모두 임포트 끝냈을때┐

 

┌ 패키지의 Full name을 적어도 되지만 지저분해지니까, 되도록 유틸리티 임포트 ┐

 

┌ [임포트한 패키지], [패키지 이름 그대로 나열한거] 2개 같이 사용 가능!┐


책136쪽

5장. 객체와 클래스

■ 8. static 키워드

서로 관련이 있는 여러 클래스를 실행하게 되면,

static이 붙은 변수를 먼저 만들어줌.

클래스의 멤버변수는 만들어지는 시점은, new로 객체생성 될 때되고,

로컬변수는 함수가 호출돼서 실행이 되어야만 실행이 될 때고,

 

static은 클래스를 만들면 가장 먼저 준비가 되어 잇음.

 

프로젝트 06Day9_staticBlock

객체 두 군데서 나눠 사용하는 공유 변수가 될 수 있음

new하는 순간은, 각각 다른 공간을 만들어 냄

 

제일 먼저 호출되고,
최초에 딱 1번만 호출됨

 

 

프로젝트 06Day7_0_staticTestMain

main함수 있는 클래스로 만들고, 그 위에 새로운 두번째 클래스를 생성함

 

 

 

 

 

프로젝트 06Day7_1_staticPerson, TestMain

 


 

책 142쪽

■ 8.3 싱글톤 디자인 패턴(Singleton Design Pattern)

-하나의 인스턴스만을 생성하기 위한 패턴. 현실세계에 존재하는 객체 중에 유일한 객체가 존재하듯이 가상세계에
서도 단 하나의 인스턴스만 생성하고자 할 때 사용되는 방법

 

1. 외부에서 객체생성하지 못하도록 생성자의 접근 지정자를 private로 지정. private은 같은 클래스에서만 접근 가능

 

2. 단 한번은 생성해야 되기 때문에 자신의 클래스에서 static객체생성 지정자를 사용하여, 프로그램 실행시 단 한번 생성

 

3. 싱글톤 private생성자는, 외부에서의 객체생성은 불가능하지만 속해있는 클래스 내부의 멤버들의 접근은 허용해야함.

   따라서 2번에서 생성한 객체의 참조변수를 static 메서드를 이용해서 외부에 리턴해줌.
    static 메서드를 사용해야 되는 이유는 객체생성 없이 사용할 수 있기 때문이다. 

 

4. 외부에서는 [ 클래스.static인 메서드 ] 로 다른 멤버들에 접근 가능.

 

new 클래스명( ) 형태가 아닌 다음과 같은 구조로 사용하면, 싱글톤 디자인 패턴이 적용된 코드

클래스명 참조변수 = 클래스명.메서드( );  //싱글톤 디자인 패턴

 


프로젝트 06Day8_0_SingleTone 의 클래스Bank

책142쪽

1) private Bank 기본 생성자가 있고

2) Bank타입의 객체를 생성해서, private static Bank 타입에 넣어서 b라는 변수로 부를건데

3) public static Bank타입의 getBank 함수는 [ private static Bank 타입의 객체를 가진] b변수를 return.

다만 static은 단 한번만 생성하기 때문에 더이상 생성되지 않음. 하지만 public 함수기 때문에

4) TestBank클래스에서 Bank타입의 getBank함수로 호출해서 생성 가능. 다만 외부 클래스에서 직접 Bank 클래스의 변수와 생성자에 접근은 불가. getBank함수로 둘러서 가능.

 

┌클래스Bank┐

뭐가 생성자고, 뭐가 함수고 뭐가 빠진건지 몰라서 2021-07-26 클래스Bank 다시 정리한거

┌클래스TestBank 정리한거

 

[ SingleTone 실습 Ex05_21]

프로젝트 06Day8_0_SingleTone 의      Ex05_21_SingleTone.java 파일

 

 

원래는 새롭게 각각 객체생성하면
각각 b1과 b2의 주소는 달라야하는데,

 

책엔 없는 예제
프로젝트 06Day7_1_static의 Person, TestMain 클래스

┌Pesron 클래스┐

ㄴstatic이 붙은 b함수 안에는, 같은 클래스의 멤버변수를 사용못함.  

 

┌TestMain 클래스┐

 

 

 


 

프로젝트 06Day8_1_MethodCall의 Ex05_12_1

 


■ 9. final 키워드

  • 클래스에 사용하면 -> 상속이 불가능
  • 변수에 사용하면    -> 값 변경이 불가능. 변수와 구별하기 위해서 일반적으로 대문자로 표현
  • 메서드에 사용하면 -> 오버라이딩이 불가능
public static final 데이터형 전부대문자변수명 = 값;

 


■ 10. Vararge ( 가변 인자) 

-메소드나 생성자 호출할때, 인자의 개수가 반드시 일치해야함

-근데 Vargargs 사용하면 반드시 일치하지 않아도  호출이 가능함.

-마침표 . 를 사용해서 전달된 인자들은 모두 배열로 관리됨. 인자들의 데이터형은 모두 동일해야함.

 

지정자 리턴타입 메서드명( 데이터형 ... 변수명){}

 

프로젝트 06Day10_object_array    Student,TestStudent클래스

┌Student 클래스┐

 

┌TestStudent 클래스┐