일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터분석
- JSP/Servlet
- JSP
- 파이썬
- 정보처리기사실기
- 혼공머신
- SQL
- JDBC
- 자바 실습
- 디버깅
- 티스토리챌린지
- 딥러닝
- 정보처리기사필기
- 오블완
- 컴퓨터구조
- 자바
- 데이터베이스
- 중학수학
- 컴퓨터비전
- c언어
- rnn
- 자바스크립트
- 중학1-1
- 상속
- 머신러닝
- html/css
- 연습문제
- 개발일기
- CSS
- 자바스크립트심화
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
캡슐화와 정보 은닉 4 - 싱글톤 패턴 본문
4주차의 마지막 학습이다. 잘하면 아침 시간에 공부를 마칠 수도 있을 것 같다.
이론 3 - 싱글톤 패턴(Singleton Pattern)
단 하나의 객체만 전체 클래스에 존재하도록 할 수 있다.
static 멤버변수에 접근하려면 메서드도 static이어야 한다. 이 메서드의 타입은 Shool이므로 반환도 School로 해준다. 이렇게 만들어놓은 메서드 안에서 우리가 생성한 private 생성자를 호출한다.
new로는 만들 수 없고 getInstance()로 만들게 된다. 이렇게 만들면 new를 한 것과 같으며 한 번만 호출된다.
그 외에는 new를 사용하면 된다.
getInstance()를 넣으면 추가한 객체를 그대로 사용할 수 있다. 별도로 값을 넘겨줄 필요가 없다.
퀴즈 4 - 싱클톤 패턴
문제를 틀려서 다시 풀어보기로 했다.
잘 몰라서 앞에서 배웠던 개념을 참고하며 풀어보았다.
실습 4 - 교내 학생 관리하기
문제 풀기
1. 지시사항 1, 2번 코드 작성하기
static을 사용하여 School 생성사ㅈ를 만들었고, 이 값을 반환하는 메서드 getInstance()를 작성했다.
2. 지시사항 3, 4번 코드 작성하기
School 형 변수를 만들고 이를 getInstance()로 호출했다.
하지만 실행 결과 오류가 발생했다. 코드를 다시 수정해보기로 하자.
3. 코드 수정하기
현재 getInstance() 메서드는 반환 타입을 명시하지 않고 선언되어 있다. Java에서는 모든 메서드가 반환 유형을 명시해야 하고, 반환하는 값에 따라 적절한 타입을 지정해야 mfs다. 예를 들어, School 객체를 반환하는 메서드라면 School이라는 타입을 명시해야 한다.
코드를 이처럼 수정하고 5번도 넘게 고쳤음에도 여전히 해결할 수 없고 문제가 무엇인지도 잘 모르겠다. 검색을 통해 이 문제를 찾아보기로 했다.
4. 수정 사항 정리하기
- getInstance 메서드와 s 필드가 private으로 선언
- getInstance 메서드가 private으로 되어 있으나, 외부에서 호출해야 하기 때문에 public이어야 한다.
- School.school1, School.school2 변수 선언 오류
- school1과 school2는 클래스 School의 인스턴스이므로 정적 변수로 선언하지 않고, 지역 변수로 선언해야 한다.
- 생성자를 private으로 선언한 이유
- School 클래스는 싱글톤 패턴을 따르고 있기 때문에 외부에서 직접 생성자를 호출할 수 없도록 private으로 선언되어야 한다. 이 부분은 올바르게 되어 있다.
도저히 내 코드에서 수정한 부분을 찾기 힘들었다. 내가 볼 때는 모두 같은 것처럼 보이는데 말이다. 나중에 보니까 난 School 다음에 점을 찍었는데 이건 멤버변수를 접근하는 방식이고 이건 정적변수로 선언된 부분을 지역변수로 가져와야 하므로 school이라고 써야 한다.
아무튼 정말 어려운 문제였다. 내가 왜 문제를 풀지 못했느냐면 영상의 화질이 너무 좋지 않은데다 크기를 키워도 거의 보이지가 않았다. 난 검은 바탕으로 된 화면은 요즘들어 잘 보이지가 않는다. 사람들은 테마은 검은색으로 하길 좋아하지만 난 이 부분도 바뀌었으면 좋겠다.
5. 코드 실행하기
이제 잘 실행되었다.
학습을 마치고
이 문제 하나 가지고 너무 기운을 뺐더니 힘이 들고 지쳤다. 나중에는 요즘 엘리스로 푸는 문제들이 오류가 많던데 이 문제도 그런 건가 하는 의구심이 들기도 했다. 헬퍼에게 물어봐도 코드를 똑같이 붙여넣어도 계속 틀렸기 때문이다.
근데 헬퍼는 답을 잘 찾지 못할 때가 많다. 그럴 때는 chatGPT에게 물어보는 것이 훨씬 더 빠르고 정확하다.
옛날에 이런 게 없었을 때는 어떻게 개발 공부를 했나 의문이 들기도 했다. 아무튼 우리는 편리한 환경 속에서 살고 있다. 이번 단원을 통해 그동안 잘 몰랐던 싱클톤 패턴에 대해서 알게 되었다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바 JDBC 1 - JDBC 기초 실습해보기 1 : JDBC가 필요한 이유 및 오라클 DB로 테이블 생성하기 (0) | 2024.12.12 |
---|---|
캡슐화와 정보 은닉 5 - 미션 문제 풀기 (0) | 2024.12.03 |
캡슐화와 정보 은닉 3 - 클래스의 상호작용 (0) | 2024.12.03 |
캡슐화와 정보 은닉 2 - 접근 제한자 2 : 실습 문제 풀기 (1) | 2024.12.03 |
상속 28 - 연습문제 실습편 문제 풀기 6 : 문제 13~14번 (0) | 2024.12.03 |