2025년 7월 19일 토요일

C# Dispose 매서드의 용도

아래와 같은 예시코드


public class MyComponent : Component

{

    protected override void Dispose(bool disposing)

    {

        if (disposing)

        {

            // 관리되는 리소스를 해제합니다.

        }

        // 관리되지 않는 리소스를 해제합니다.

        base.Dispose(disposing);

    }

}


프로그램 initialize 단계에서 위와 같은 코드가 들어간다. 이유는? 메모리 누수를 방지하기 위해.

메모리 누수란?
  • 메모리 누수(Memory Leak)는 프로그램이 더 이상 사용하지 않는 메모리를 해제하지 않아서 발생하는 문제입니다.
  • 메모리 누수가 발생하면 프로그램이 사용하는 메모리가 계속 증가하여 성능 저하, 심지어 프로그램이 종료될 수 있습니다.


좀 더 넓게 보면 1) Dispose 매서드는 실행하는데 필요한 리소스를 명시적으로 해제하며 메모리 누수도 방지하게 된다. 2) 추가로 컴포넌트의 라이프 사이클을 관리, 즉 객체의 생성, 사용, 해제를 관리하는 의미도 있다. 크게 보면 두 가지 목적이 있는 것.

리소스는 컴포넌트가 실행되는 동안 사용되는 시스템 자원을 일컫는데 예를들면,

- 메모리 : 컴포넌트가 사용하는 객체, 데이터 구조 등을 위해 할당되는 공간
- 파일 핸들 : 컴포넌트가 사용하는 파일, 스트림 등
- 네트워크 연결 : 컴포넌트가 사용하는 소켓, 네트워크 연결 등
- GDI (Graphic Device Interface, Windows 운영 체제에서 그래픽스 출력을 담당하는 API) 리소스 : 컴포넌트가 사용하는 그래픽스 장치 인터페이스 리소스 등

이 있다. 

관리되는 리소스와 관리되지 않는 리소스가 구분되는데 관리되는 리소스는 .NET 런타임에 의해 관리되는 리소스이다. 예를 들어, .NET 객체, 배열 등이 관리되는 리소스에 해당하고, 관리되지 않는 리소스는 반대로 .NET 런타임에 의해 관리되지 않는 리소스로, 예를들면 파일 핸들, 네트워크 연결, GDI 리소스 등이 관리되지 않는 리소스에 해당한다.


이러한 리소스 사이클 관리를 하는 dispose매서드를 파이썬에서 구현한다면 아래와 같이 객체 소멸자를 정의할 수 있다. 

import contextlib

class MyClass:
    def __init__(self):
        print("객체가 생성되었습니다.")

    def close(self):
        print("객체가 해제되었습니다.")

    def __del__(self):
        print("객체가 소멸되었습니다.")

with contextlib.closing(MyClass()) as obj:
    # 객체 사용
    pass


파이썬 프로그래밍에서도 이러한 리소스 관리가 필요할까? 










2024년 2월 9일 금요일

Note

Conda 가상환경 생성 / 제거

>conda create --name [Name] / conda remove --name [Name] --all

** 특정 python 버전 가상환경 생성인 경우

>conda create --name [Name] python=3.8 pip

Conda 가상환경 실행 /  종료

>conda activate [Name] / conda deactivate

 Conda 가상환경 패키지 확인 

>conda env list

설치된 python package 확인

>conda list


가상환경 패키지 update

>conda update -n base conda

>conda update --all


PIP package 설치

>pip install [PackageName]


Pygame 참고 site : https://sweetburble.tistory.com/33

Auto Encoder : https://deepinsight.tistory.com/123

가상환경 재설치 참고 : conda 가상환경 패키지를 저장하고 다른 컴퓨터에 똑같이 설정하기 (tistory.com)



2022년 9월 25일 일요일

[Python 3.6] Anaconda 설치 후 가상환경 생성 / 기본 패키지 설치 (numpy / OpenCV 등 )

 Conda 가상환경 생성 / 제거

>conda create --name [Name] / conda remove --name [Name] --all

** 특정 python 버전 가상환경 생성인 경우

>conda create --name [Name] python=3.8 pip


Conda 가상환경 실행 /  종료

>conda activate [Name] / conda deactivate

 Conda 가상환경 패키지 확인 

>conda env list


가상환경 내 패키지 설치

> conda install [PackageName]

or PIP package 설치

>pip install [PackageName]


conda나 PiP 둘중 아무거나로 설치 진행

(코드 내 import된 패키지들 설치.)

eg)

>conda install numpy

혹은 

>pip install numpy

(패키지 설치시에는 구글링을 통해 특정 버전의 이슈가 있는지 확인해 보는게 좋다).


가상환경 패키지 update

>conda update -n base conda

>conda update --all

2022년 9월 22일 목요일

[VS Code] Python Extension in VS Code

 https://bas.codes/posts/best-vscode-extensions-python


Conda 명령

https://dowtech.tistory.com/14



2021년 3월 3일 수요일

[캠핑] 동계 침낭 비교 (FEATHERDOWN WINTER-1500g, F-1300g 비교)

보유하고 있는 침낭이 보이스카웃 때 받은 것이 유일하다. 10살 때 처음 받은 침낭을 아직도 쓰고 있는 것이다. 이 침낭으로 그 동안 겨울에도 잘도 다녔다. 

하지만 올해 2월 말 캠핑을 다녀오고 나서 깨달았다. 아, 이러다 죽겠구나. 

겨울이 끝나가는 시점이라 낮에는 영상 10도 수준까지 올라가는 날씨였지만, 해가 지고나자 영하로 기온이 떨어졌고, 새벽에 확인한 온도는 영하 5도였다. 

사실 생각보다 낮은 기온은 아니었지만, 믿었던 핫팩 2개 모두 불발하면서 밤새 추위와 싸우며 거의 잠을 못잤다.

이를 계기로 겨울용 침낭을 구매하기로 하고 추천받은 FEATHERDOWN제품을 비교해 보았다. 

결론은 F-1300g제품이 끌린다. 패킹시 부피, 중량 면에서 좀 더 작은 것을 선택하려고 하다보니 나온 결론이다.

1. 디자인은 둘 다 번데기같은 디자인이라 크게 비교할 건 없을 듯.

2. 패킹사이즈 : 적혀져 있는 정확한 정보는 없지만 사진 정보로 미루어 봤을 때 높이만 F-1300g이 약 5cm 작다는 것 같다.

3. 중량 : Winter-1500g : 2000g, F-1300g는 1860g

4. 필파워 : Winter-1500g 700FP vs F-1300g 800FP

5. Size (가슴 x 길이 cm) : Winter-1500g 80 x 210, F-1300g 82 x 205


지르러 가자.

(상세 정보, 출처는 맨 아래)

FEATHERDOWN WINTER-1500g

패킹 사이즈
내한온도
상세정보


FEATHERDOWN F-1300g
디자인

패킹 사이즈
내한온도
상세정보

출처

WINTER-1500g (featherdown.co.kr)

F-1300g(Pertex Shell) (featherdown.co.kr)

2021년 3월 1일 월요일

[캠핑] 텐트 스펙 비교 Vango Alpha 300 / MSR Elixir 2 Gold

지금 보유중인 Vango Alpha 300. 3인용 텐트로 밝은 파랑색 색상과 큰 size가 맘에 들기도 했고 마침 행사중이어서 약 15%할인가에 구매해서 백팩킹 및 캠핑용으로 사용중이다.

구매 후 수차례 백팩킹과 캠핑을 다녀본 결과 색상이나 내부 공간의 넉넉함에 만족하고 사용하고 있었다.

다만, 조금 더 경량화를 하면 좋겠다는 생각이 들었다. 같이 백팩킹을 다니는 친구의 경우 솔캠을 위한 2인용 텐트를 구매하여 들고다녔는데, 큰 텐트를 들고 다니다가 가볍고 부피도 작은 텐트를 솔캠용으로 다니기 편하다고 하는 말에 조금 더 작은 텐트 구매를 생각하고 있던 참이었다.

마침 캠핑 중 지나가다 본 MSR Elixr 2 Gold 디자인이 너무 맘에들어서 경량화 관점에서 기존에 가지고 있던 Vango Alpha 300과 스펙 비교를 해보았다. 

중요한 것은 size와 무게! 그리고 부피.

부피 비교는 사실 어려울 것 같다. 무게는 약 1.5kg 줄일 수 있을 것 같고 실내 size로 봐도 누울 공간 제외하고 MSR 제품이 여분의 공간이 좀 있을 것 같다.

결국은 지르러 갈 예정.
이런 스펙비교는 겉다리일 뿐. 이미 나는 디자인과 색상에 마음이 가버렸음.

Vango Alpha 300






Weight : 4.2kg (팩 제외 3.9kg)
Size : 210 x 180 x 125 cm

MSR Elixir 2 Gold


Weight : 2.77kg
Size : 213 x 127 x 102 cm




 정보 / 그림 출처

Web site :

Vango  : Vango Alpha 300 | Camping-equipment | Vango UK

MSR : Elixir™ 2 Gold(엘릭서 2 골드) | MSR® Tents, Stoves, Cookware (msrgear.co.kr)

국내 쇼핑몰:

[반고] 알파 300 모로칸 블루 텐트 - 3인용/돔텐트 - CJmall

엘릭서 2 골드 (11st.co.kr)

2020년 12월 27일 일요일

[스파르타 코딩클럽] 이미지처리로 배우는 딥러닝 회고



1. 
수강 목적: 스파르타 온라인 수업을 신청한 이유
스파르타 코딩클럽의 장점은 쉽고 재밌다는 데에 있는 것 같다. 딥러닝에 대해서는 이론적으로만 접해봤지, 코딩을 한 것은 먼 옛날이고 최근에 나오는 내용은 전혀 모르고 있었던 터라, 쉽고 재미있게 다시 접근해보고자 수업을 신청하게 되었다. 

2. 배운 점/잘한 점: 많이 배웠고 스스로 잘했다고 생각하시는 점을 적어주세요!
이미지 처리 부분에 대한 내용과 거기에 사용되는 딥러닝 모델들을 활용하는 것은 확실히 배운것 같다. 
 
3. 보완/발전하고 싶은 점: 수강하는 과정에서 스스로를 보완하고 발전하고 싶은 점을 적어주세요
더 나아가 자연어 처리 관련된 모델들도 한 번 실행 해 보고 싶다. 

4. 앞으로의 계획: 이번 수업이 인생 마지막 코딩..아니시죠? 앞으로의 계획과 목표를 적어주세요 :-) 

확실히 이번 스파르타 온라인 강의를 신청한 목적은 이룬 것 같다. 이미지처리에 국한되긴 했지만 다양한 모델들을 간단히 처리하고 얼굴인식, 사진 컬러/해상도 복원하는 기능들을 사용해 봤다. 

아쉬운 점은 이곳에 사용된 모델들이나 기술들에 대해서는 그냥 소개만 하고 넘어갔다는 점이다. 아마 강의의 목적이 쉽고 빠르게 접해보도록 하는 것이기 때문에 어쩔 수 없는 것 같다. 이런 아쉬운 점은 대신 앞부분에 이론/기술적 설명을 해주는 강의(꿀팁강의)가 따로 추가되는 식으로 보완해 주는 것 같았다.

궁금한 점은 이렇게 강의에 소개된 모델들이 정말 free로 사용가능한 것인지, 이런 다양한 model 파일들을 또 어디서 찾아볼 수 있을지. 이런 것들은 차차 알아봐 가면 좋겠다.

5주동안 약 3~4시간 정도 투자해가면서 배운 터라 실력이 깊지 않고, 숙제도 거의 강의에 나온 내용들을 따라한거라 좀 밋밋하긴 하다. 꿀팁영상에서 나온 내용들을 다시 한 번 보고, 다른 모델들이 어떻게 사용되고 있는지 현재 트렌드를 읽는 수준까지 가는것을 목표로 공부해 봐야겠다.

2020년에 찍은 사진중 마음에 드는 사진을 이번에 배운 내용을 토대로 변환해 봤는데 결과가 썩 맘에 든다. 생각보다 재미있었고 유용한 강의였어서 만족하는 중이다. 

어렵게만 느껴지던 딥러닝을 이렇게 쉽고 재밌게 구성하다니.. 이런거는 스파르타 코딩클럽의 장점인 것 같다. (스파르타코딩클럽과 강의를 준비해주신 튜터분들꼐 감사드립니다.)

2020-12-27. 마치며.