객체 지향 프로그래밍 23

파이썬 변수는 언제 소멸될까?

파이썬 소멸 시기 파이썬과 자바의 공통점은 메모리를 프로그래머가 관리 하지 않는다는 것이다. 메모리 관리를 대신 해주는 무언가가 존재한다는 말이다. 그 역할을 가비지 컬렉션과 레퍼런스 카운터가 맡는다. 레퍼런스 카운트는 해당 변수(객체)가 사용되고 있는 지를 나타낸다. 가비지 컬렉션는 레퍼런스 카운트가 0이 되는 순간 메모리를 수거해간다. 📌가비지 컬렉션 가비지 컬렉션 가비지 컬렉션는 레퍼런스 카운터가 0이 되는 순간 객체의 메모리를 수거해 간다. 📌레퍼런스 카운트 레퍼런스 카운트 레퍼런스의 뜻은 '참조'라는 뜻이다. 즉 레퍼런스는 해당 변수 or 객체가 참조 되고 있는지를 확인한다. 따라서 레퍼런스 카운트가 0이 되는 변수를 가비지 컬렉터가 수거해가는 것이다. 📌객체의 생성과 소멸 # Python li..

디자인 패턴 이해하기

1. 디자인 패턴 정의 이전 포스팅에서 객체지향특성에 대해 알아보았고, 해당 특성을 이용하며 지켜야할 5가지 원칙이 있었습니다. 그리고 객체 지향 특성들을 '도구', 객체 지향 원칙들을 '도구 사용 방법' 이라고 비유했었습니다. 👌 디자인 패턴은 '도구의 활용 방법'이라고 할 수 있습니다. 우리는 도구의 특징과 어떤 원리로 사용해야 하는지 알고 있습니다. 칼을 예로 들면, 칼은 날카롭고 뾰족한 특징이 있습니다. 그래서 칼은 무엇인가를 자르거나, 찌르는 방식으로 사용할 수 있죠. 칼은 수술을 하거나, 요리를 하거나, 동물을 사냥하는데 활용할 수 있습니다. ✨ 물론 칼로 망치질을 한다던가, 땅을 판다고해도 잡혀가지는 않습니다. 하지만 적절한 활용법은 존재합니다. 개발자들이 공통으로 겪는 '문제들에 대한 해결..

객체지향 설계원칙 이해하기

1. SOLID란? 이전 포스팅에서 객체 지향 특성에 대해 다루어 보았습니다. 캡슐화, 상속, 추상화, 다형성으로 인한 객체 지향의 장점을 이해했습니다. 그런데 '설계 5원칙'은 또 무엇일까요? 🤦‍♂️ 약자로 'SOLID'라고 써놓으니 더 어렵게 느껴지는 것 같습니다. 쉽게 말하자면 설계 5원칙이란 '객체 지향 사용법'입니다. 👀 학습한 '객체 지향 특성'이 객체 지향 프로그래밍을 위한 '도구'였다면, '객체 설계 5원칙'은 그 도구를 사용하는 '도구 사용 방법'인 것이죠. ✨ 우리는 이 5가지 원칙을 지키면서 프로그램을 작성할 것입니다. 그 프로그램은 이해하기 쉽고, 유지보수 하기 용이하며, 논리적일 가능성이 높습니다. 👏👏👏 1.1. 단일 책임 원칙(SRP) 단일 책임 원칙은 하나의 클래스는 하나의..

파이썬 - 입/출력, 자료구조 빠르게 정리하기

1. 파이썬 기초 문법 1.1. 입력받고, 출력하기 파이썬에서는 간단하게 input()함수로 입력을 받을 수 있습니다. 출력은 print() 함수를 이용하면 쉽게 사용할 수 있습니다. 사용자로부터 input() 함수를 이용해 입력을 받겠습니다. input()은 구분 문자가 없이 한 줄을 읽어옵니다. input().split()으로 사용하면 공백을 기준으로 입력을 받을 수 있습니다. var = input().split() print(var) input().split(';')이라고 입력하면 ';' 문자를 기준으로 입력을 받습니다. var = input().split(';') print(var) 1.2. 문자열 덧셈, 곱셈 파이썬의 장점 중 하나는 문자열 처리가 간편하다는 것입니다. 2 + 3 = 5 를 계산..

전략 패턴, 템플릿 콜백 패턴

1. 전략 패턴 1.1. 전략 패턴이란? 전략 패턴은 프로그램 수행 중에 알고리즘을 선택할 수 있도록 만든 패턴입니다. 선택할 알고리즘이 바로 '전략(Strategy)'이 되는것이죠. 👏 그리고 이 전략을 선택하는 주체인 '컨텍스트(Context)'가 필요합니다. Context는 문맥이란 뜻인데요. 아마도 맥락에 따라 서로 다른 전략을 선택하기 때문에 붙은 이름이 아닐까 싶습니다. 👀 Context는 전략을 수행하는 객체라고 봐도 무방할 것 같네요. 마지막으로 Context에 Strategy를 주입해주는 '클라이언트(Client)'가 필요합니다. Context가 직접 전략을 선택하지 못하기 때문이죠. 따라서 클라이언트가 Context에게 문맥에 맞는 Strategy를 '주입(DI:Dependancy In..

팩토리 메서드, 템플릿 메서드 패턴

1. 팩토리 메서드 패턴 팩토리 메서드 패턴(Factory Method Pattern)이란 객체 생성을 하는 클래스를 따로 두는 것입니다. 그래서 공장(Factory)이라는 표현을 쓰나봅니다. 🙂 실질적인 클래스의 구현은 하위 클래스에서 이루어지는데요. 이렇게 되면 상위 클래스는 하위 클래스의 구현내용을 모르더라도 사용이 가능합니다. 어려운 말로 객체간 결합도가 낮아진다고 하는데요. 결합도란 모듈이 어떤 작업을 수행할 때, 다른 모듈에게 얼마나 의존하느냐입니다. 결합도가 낮아지면 유지보수 하기가 쉬워집니다. 예시를 먼저 보는게 빠를 것 같습니다. 현대자동차에서 차를 만든다고 가정해보겠습니다. 그럼 자동차 공장에 팩토리 메서드를 두고, 공장에서 승용차, 버스, 스쿠터 등을 생성하도록 두는 것이죠. 😊 UM..

싱글톤, 프록시, 데코레이터 패턴

객체 지향 디자인 패턴 종류 1. 싱글톤 패턴 이번엔 싱글톤 패턴에 대해서 알아보겠습니다. 🙂 싱글톤 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴입니다. 예를 들어 단 하나의 관리자 계정을 여러 명이서 사용하는 경우입니다. 이런 경우 어떻게 코딩하면 좋을까요? 하나의 Admin 계정을 여러 명이 공유해서 사용하는 프로그램을 짜보겠습니다. package exSingleton; // Admin 클래스 public class Admin { // 정적 참조 변수 static Admin one_id; // 객체 생성 방지 private Admin() {}; // 정적 메소드 public static Admin getInstance() { // 참조 변수 == null일 때 객체 생성 if (one_id ..

객체 지향 특징 - 캡슐화, 상속, 추상화, 다형성

1. 절차적/구조적 프로그래밍 객체 지향은 절차적/구조적 프로그래밍으로부터 발전해 왔습니다. 따라서 절차적/구조적 프로그래밍의 특징을 갖고 있습니다. 그래서 간단히 정리하고 넘어가려고 합니다. 😊 1.1. 절차적 프로그래밍 절차적 프로그래밍은 코드가 작성된 순서대로 실행되도록 구현해야 합니다. 👍 특히 Goto처럼 분기를 일으키는 명령문의 사용을 지양합니다. 잦은 분기는 프로그램의 작동 원리를 파악하는 데 혼동을 줄 수 있기 때문이죠. 😢😢 그래서 Java에서는 아예 막아 놓았습니다. 1.2. 구조적 프로그래밍 구조적 프로그래밍은 함수를 사용하여 중복을 줄이고 논리적으로 기능을 분리하는 것입니다. 이렇게 구현하면 프로그램 구조를 파악하기 쉬워지고 유지보수에도 용이해지죠. 또한 함수 안에서 지역변수를 사용..

스레드 - 멀티 스레드와 멀티 프로세스 쉽게 구분하기

동시에 여러 작업을 처리하는 방법 1. 멀티 태스킹 멀티 태스킹이란 동시에 여러 가지 작업을 수행하는 것을 말합니다. 병렬로 일을 처리하는 것을 의미하죠. 이를 구현하기 위한 방식에는 두 가지 방식이 있습니다. 2. 멀티 스레드와 멀티 프로세스 멀티 스레드(Multi-Thread)는 하나의 프로그램이 여러 개의 작업을 수행하도록 합니다. 각 작업을 스레드(Thread)라고 하며 스레드는 동일한 자원을 공유합니다. 정확히는 Static 영역과 Heap 영역을 공유합니다. 스레드는 Stack영역을 서로 분할해서 사용합니다. 따라서 스레드간 Stack 영역을 접근할 수 없지만 Static영역과 Heap영역을 공유합니다. 우리는 Static 공간에 클래스의 멤버 변수(=전역변수, 필드, 속성, Property)..

Java 실행 과정과 메모리

자바가 실행되는 과정 1. JDK, JRE, JVM의 역할과 장점 JDK로 개발된 프로그램은 JRE에 의해 실행되고 가상 기계인 JVM 환경에서 구동됩니다. JDK는 소스 코드를 바이트코드로 바꿔줄 수 있는 javac.exe파일을 갖고 있습니다. JRE는 자바 프로그램을 실행할 수 있는 java.exe파일을 갖고 있습니다. 이런 구조는 컴퓨터 종류 및 OS가 서로 다르더라도 하나의 컴파일러로 실행할 수 있다는 장점이 됩니다. JDK, JRE, JVM이란 용어가 처음엔 무척 생소합니다. JDK는 자바 개발 도구로 Java Development Kit의 약자입니다. JRE는 자바 실행 환경으로 Java Runtime Environment의 약자입니다. JVM은 자바를 실행하는 가상 머신으로 Java Viru..