반응형

CS 공부 33

# 이터레이터(iterator) 패턴

🔄 이터레이터 패턴: 자료구조를 순회하는 스마트한 방법프로그래밍을 하다 보면 데이터를 순회해야 할 때가 많다. 배열, 리스트, 맵(map) 같은 자료구조에서 요소들을 하나씩 가져와서 처리하는 작업은 흔하다. 그런데 각기 다른 자료구조를 똑같은 방식으로 순회할 수 있다면 얼마나 편리할까? 🤔 🧐 이터레이터 패턴이란?이터레이터 패턴(Iterator Pattern)은 이터레이터(iterator)를 이용해 컨테이너(container)의 요소들에 접근하는 디자인 패턴이다.컨테이너란 동일한 요소들을 담아두는 집합을 말하는데, 대표적으로 배열, 리스트, 맵 등이 있다. 이터레이터 패턴을 사용하면 내부의 자료구조가 다르더라도 통일된 방식으로 요소들을 순회할 수 있다는 장점이 있다. 예를 들어, 배열과 연결 리..

CS 공부 2025.02.20

# 팩토리 패턴

☕ 팩토리 패턴이 뭐길래?오늘은 팩토리 패턴(Factory Pattern)에 대해 공부해봤다. 이게 디자인 패턴 중 하나라고 하는데, 정확히 뭐 하는 걸까?🎭 팩토리 패턴이란?팩토리 패턴은 객체 생성의 책임을 상위 클래스(또는 인터페이스)와 하위 클래스가 분리하도록 설계하는 패턴이다.쉽게 말해서, 상위 클래스에서는 객체의 생성 방법을 몰라도 되고, 하위 클래스에서만 구체적인 생성 로직을 관리하는 방식이라고 보면 된다. 이를 통해 얻을 수 있는 장점은? 상위 클래스는 객체 생성 방식에 대해 몰라도 되니까, 코드가 더 유연해진다! 🎉 객체 생성 로직이 한 곳(팩토리)에서 관리되니까 유지보수가 편하다! 🔧 그렇다면 실제 코드에서는 어떻게 적용될까? ☕ 커피 공장에서 배우는 팩토리 패턴팩토리 패턴..

CS 공부 2025.02.20

# 싱글톤 패턴 구현 방법 7가지

☝️ 싱글톤 패턴을 구현하는 7가지 방법면접에서 디자인 패턴을 물어보면 보통 개념 정도만 묻지, 실제로 구현 방법을 상세히 묻는 경우는 드물다고 한다. 그런데 Java 개발자라면 싱글톤 패턴을 구현하는 다양한 방법을 익히면서 얻어가는 것들이 많다고 한다. 그래서 이번 기회에 싱글톤 패턴을 구현하는 7가지 방법을 정리해보려고 한다. 🎯 싱글톤 패턴이란?싱글톤 패턴(Singleton Pattern)이란, 애플리케이션 내에서 단 하나의 인스턴스만 생성되도록 보장하는 디자인 패턴이다.대표적인 예로 데이터베이스 연결 객체, 로깅 시스템 등이 있다. 그렇다면, 싱글톤을 구현하는 다양한 방법이 존재하는 이유는 뭘까?멀티스레드 환경에서 안전하게 단 하나의 인스턴스를 보장하기 위해서!자, 그럼 하나씩 살펴보자. ..

CS 공부 2025.02.20

# 싱글톤 패턴

싱글톤 패턴 🏆자바 스프링 공부와 디자인 패턴을 공부하면서 자주 마주치는 개념이 있다. 바로 싱글톤 패턴 이다.🎯 싱글톤 패턴이란?싱글톤 패턴은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다.보통 클래스는 new 키워드를 통해 여러 개의 개별적인 인스턴스를 만들 수 있다. 하지만 싱글톤 패턴을 적용하면, 클래스에서 단 하나의 인스턴스만 생성되도록 강제할 수 있다. 이게 어디에 많이 쓰이냐면, 데이터베이스 연결 모듈 같은 데서 많이 사용된다고 한다.예를 들어, 데이터베이스에 연결할 때마다 새로운 커넥션을 생성하는 것보다, 하나의 연결을 유지하면서 여러 곳에서 공유하는 게 더 효율적이다. ❓ "정말 같은 인스턴스일까?"한번 예제를 보자. class Singleton { private ..

CS 공부 2025.02.17

# 라이브러리와 프레임워크

📚 라이브러리 vs 프레임워크 🤔오늘은 "라이브러리"와 "프레임워크"의 차이점에 대해 정리해보려고 한다.둘 다 특정한 기능을 모듈화한 것인데, 뭐가 다를까? 📌 라이브러리란?라이브러리는 공통으로 사용될 수 있는 특정 기능들을 모듈화한 것이다.즉, 특정한 기능을 쉽게 사용할 수 있도록 정리된 코드 묶음이라고 보면 된다. 디렉토리명, 파일명 등에 대한 규칙이 따로 없다. 개발자가 원하는 대로 자유롭게 가져다 쓸 수 있다. 특정 기능을 수행하는 도구(tool) 같은 느낌이다. 예를 들어, Pandas는 데이터 분석을 쉽게 할 수 있도록 도와주는 라이브러리이다.필요한 기능을 직접 호출해서 사용하면 된다. import pandas as pd data = pd.read_csv('data.csv')..

CS 공부 2025.02.17

# 디자인 패턴 소개

🎨 디자인 패턴이 뭘까? 🤔코드를 짜다 보면 가끔 너무 거대한 하나의 덩어리가 되어버릴 때가 있다.이걸 유지보수하려면 도대체 어디서부터 손을 대야 할까? 😵‍💫이런 문제를 해결하기 위해 나온 개념이 바로 디자인 패턴(Design Pattern) 이다! 그리고 신기하게도 이 디자인 패턴이 여러 라이브러리나 프레임워크의 토대가 된다고 한다. 디자인 패턴을 배우면 얻을 수 있는 이점은 대략 두 가지로 정리할 수 있다.여러 문제를 해결하는데 영감을 얻을 수 있다! 팀원들과의 의사소통이 빨라진다! "이거 싱글톤으로 하면 되겠네요" 한 마디🎭 디자인 패턴의 종류디자인 패턴은 크게 3가지 종류로 나뉜다.생성 패턴 (Creational Pattern)구조 패턴 (Structural Pattern)행동 ..

CS 공부 2025.02.17

# JIT 컴파일러

JIT 컴파일러 🚀JIT(Just-In-Time) 컴파일러라는 개념을 처음 접했을 때, 나는 약간 헷갈렸다. 이게 인터프리터야? 아니면 컴파일러야? 그런데 알고 보니 둘의 중간 형태라고 한다. 그렇다면 어떻게 동작하는 걸까? 🤔JIT 컴파일러란? 🛠️JIT 컴파일러는 실행 시점에서 프로그램 코드를 분석하고, 자주 실행되는 부분(hot spot)을 찾아 해당 부분만 기계어로 변환하는 방식이다. 일반적인 컴파일러처럼 실행 전에 미리 컴파일하는 것이 아니라, 실행 중에 실시간으로 컴파일이 이뤄진다.즉, 인터프리터처럼 코드를 한 줄씩 읽으며 실행하지만, 성능을 높이기 위해 자주 사용되는 코드(핫 코드)는 컴파일해서 빠르게 실행할 수 있도록 하는 것이다.JIT 컴파일러의 동작 과정 🔄JIT 컴파일러의 동작..

CS 공부 2025.02.16

# 오버헤드와 가비지 컬렉션

🗑️ 가비지 컬렉션과 오버헤드프로그래밍을 하면서 "메모리 관리"라는 단어를 자주 듣게 된다. 특히 Java 같은 언어를 사용할 때, 가비지 컬렉션(Garbage Collection, GC) 이 자동으로 메모리를 관리해준다는 얘기를 듣고 "그럼 우리는 신경 쓸 필요 없겠네?"라고 생각할 수도 있다. 하지만 정말 그럴까? 🤔🧹 가비지 컬렉션이란?가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 중 더 이상 사용되지 않는 메모리를 자동으로 해제하는 과정이다. 덕분에 개발자가 직접 free() 같은 함수를 호출할 필요가 없고, 메모리 누수(memory leak) 문제를 줄일 수 있다.하지만 가비지 컬렉션이 언제, 어떻게 동작하는지는 생각보다 복잡하다. 예를 들어, Java의 GC는 Mark and Swee..

CS 공부 2025.02.16

# 추상화란 무엇인가?

추상화란 무엇인가? 🤔프로그래밍에서 추상화는 복잡한 데이터, 구조, 시스템 등에서 핵심적인 부분만을 추출해 덜 자세하게 만드는 과정을 말한다. 즉, 불필요한 세부사항이나 절차를 감추고, 인터페이스를 통해 간단한 접근만 가능하도록 하여 시스템의 복잡도를 줄이는 방법이다. 추상화는 복잡한 시스템을 더 쉽게 다룰 수 있게 해주기 때문에, 개발에서 매우 중요한 개념이라고 할 수 있다.사실, 내가 이 추상화 개념을 저번 달에 공부한 Spring Boot 강의에서 자주 접했었기 때문에, 이 개념이 좀 더 쉽게 와닿았다. 특히, Spring Boot의 구조에서 인터페이스와 클래스들이 어떻게 추상화되어 있는지를 보면서 추상화가 왜 중요한지 조금 더 이해할 수 있었다.데이터 추상화 🐱🐶🐵데이터 추상화는 특정 데이..

CS 공부 2025.02.16

# 오버로딩과 오버라이딩

오버로딩과 오버라이딩에 대한 내 생각 💭오늘은 오버로딩과 오버라이딩에 대해 정리해보려고 한다. 사실 처음에는 헷갈리기도 했고, 지금도 완벽하게 이해한 건 아니지만, 그래도 내 생각을 풀어보려고 한다.오버로딩 (Overloading) 🔧오버로딩은 "과적하다"는 의미가 있다고 했다. 이름이 같아도 매개변수의 개수, 타입, 순서를 다르게 해서 같은 이름으로 여러 메서드를 정의할 수 있다는 거였다. 예를 들어 add(int a, int b)랑 add(double a, double b) 같은 거였다. 이런 게 왜 필요할까?처음엔 왜 이름을 같은 걸로 써야 할까? 싶었다. 매개변수가 다르면 메서드 이름도 달리 해야 하는 거 아닌가? 그런데, 이렇게 같은 이름을 쓰는 이유는 유연하게 메서드를 호출할 수 있고, 코..

CS 공부 2025.02.16
반응형