Develop

4일차_클래스, 생성자, 접근제한자, OOP(캡슐화), 싱글턴 패턴 본문

백엔드/KDT_Programmers

4일차_클래스, 생성자, 접근제한자, OOP(캡슐화), 싱글턴 패턴

230801 2025. 3. 8. 01:11

안녕하세요~!

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에서 모두 복습해야겠습니다. 화이팅 !!