| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- zsh theme
- Less
- mysql 표 출력
- VI
- 분할정복 방법
- cs
- 네트워킹데이
- Pager
- 인프런워밍업클럽
- 티스토리챌린지
- mysql 표
- zsh
- oh-my-zsh
- 오블완
- table status
- 터미널
- 알고리즘
- CS스터디
- 동적 프로그래밍 방법
- spring boot
- 스터디2기
- 이진탐색
- 인프런
- 순차탐색
- MySQL
- mycli
- 맥
- 데이크스트라
- 오일러 경로
- 욕심쟁이 방법
- Today
- Total
Develop
4일차_클래스, 생성자, 접근제한자, OOP(캡슐화), 싱글턴 패턴 본문
안녕하세요~!
4일차이자 1주차 마지막 날 입니다.
공부 내용
오늘은 클래스부터 생성자, 접근제한자, OOP개념에서 캡슐화, 싱글톤 패턴 등 살펴보았는데요.
캡슐화까지는 개인적으로 공부했던 내용이라 알고 있었지만 부족한 내용들이 채워지는 그런 하루였습니다.
근데?! 강사님이 코드 엄청빨리치셔서 리팩토링 하던 주문관리 프로젝트 내용은 잘 이해하지 못했습니다 ㅠ-ㅠ 흑흑
그러던 와중에 다른 수강생분은 질문에 대답을 정확하게 하는걸보고 고수라고 생각했습니다 ㄷㄷㄷ
오늘 배운 것 중 나의 관심을 끈 것들
맥 OS 기준 Crtl + tab (Switcher, 빠른 파일 전환)
해당 단축키를 사용하면 열려있는 자바 파일을 빠르게 전환 할 수 있습니다.

싱글턴 패턴 (Singleton pattern)
: 인스턴스를 최초 한번만 생성하고, 생성한 인스턴스에 접근하기 위한 전역 접근점을 제공해줌
아직 공부하지 않은 영역이어서 내용을 듣고 '이런 패턴을 고려하는구나~' 하고 넘어가려 했는데,
다른 수강생분이 싱글턴 패턴과 static 변수의 차이에 대해 질문해주셨는데 강사님이 아주 좋은 질문이라고 하셔서
궁금해져서 차이점에 대해 내용을 정리 해봤습니다.
결론 : static 변수는 프로그램 시작 부터 끝까지 유지되지만, 싱글턴은 필요할 때 생성 가능하고 객체관리가 더 용이하다고 합니다.
| 항목 | static 변수 사용 | singleton pattern |
| 객체 생성 방식 | new로 직접 생성됨 | getInstance()로 접근(내부에서 1회만 new) |
| 메모리 할당 | static으로 선언된 클래스의 메모리 공간에 저장됨 | heap 영역에 1개의 객체가 유지됨 |
| 객체 관리 | 프로그램 종료시까지 유지 (class 로드 시점부터 존재) |
필요할때만 객체를 생성할 수 있음 |
| 의존성 주입 | class간 강한 결합 발생 | 싱글턴을 인터페이스 기반으로 변경 가능해서 유연함 |
| 객체 수명 주기 | 클래스가 메모리에 있는 동안 계속 유지 | 필요하면 초기화해서 변경 가능 |
escape sequence 중에서 " \r "
(이건 이틀전에 배운 것 같은데 복습하면서 끼워넣었습니다)
escape sequence는 특정 문자를 표현하기위한 특별한 문자열로,
우리가 흔히 아는 개행문자(줄바꿈) " \n " 을 예시로 들 수 있습니다.
그 중에서 " \r " 은 커서를 현재 줄의 맨앞으로 이동한다고 합니다.
// \r : carriage return
솔직히 이것만보고 이해가 안돼서 chatGPT에 물어봤는데
우리가 프로그램을 설치할 때 설치창에 " 진행중(20/100%)..."와 같이 표시되다가
"완료(프로그램을 시작합니다.)" 등과 같이 바뀌는 것을 표현할때 사용하는 문자열 이라고 합니다!
public class Test {
public static void main(String[] args) throws InterruptedException {
String[] loading = {"-", "\\", "|", "/"};
for (int i = 0; i < 20; i++) {
System.out.print("\rLoading... " + loading[i % 4]); // 커서를 줄 맨 앞으로 이동
Thread.sleep(200);
}
System.out.println("\rDone! "); // 완료 메시지 출력 후 남은 글자 지우기
}
}
그니까 '진행중'과 '완료' 2가지 상태를 표시한다치면, 한 자리에서 출력을 덮어쓴다고 보시면 됩니다.
상기 코드를 IntelliJ에서 실행해봤습니다. 나중에 제 프로그램 만들면 적용해봐야겠습니다ㅋㅋ
어제는 프로그래머스에서 제공하는 LMS 사이트에서 짧은 인강을 들었는데,
비유를 통한 설명이 저한테 너무 잘맞아서 복습을 2시간 정도 했습니다.
주말에는 1주차 진도분을 LMS에서 모두 복습해야겠습니다. 화이팅 !!
'백엔드 > KDT_Programmers' 카테고리의 다른 글
| 6일차_Wrapper class, String(immutable), Collection, Generic (1) | 2025.03.12 |
|---|---|
| 5일차_상속, 추상 클래스, 인터페이스, ENUM (0) | 2025.03.11 |
| 3일차_Java Swich문, While문, Array, Class 등 (0) | 2025.03.07 |
| 2일차_Java 연산자, 조건문, 모듈화 (0) | 2025.03.06 |
| 1일차_250304_OT, JDK, IDE 설치, Java 이론 강의 등 (3) | 2025.03.05 |