Simple Use

using System;

public class SomeManager {
    private Lazy<SomeClass> lazyLoadedObject = new Lazy<SomeClass>(() => new SomeClass());

    public SomeClass LazyLoadedObject {
        get { return lazyLoadedObject.Value; }
    }
}

public class SomeClass {
    // SomeClass의 내용
}

 

 

초기화를 개발자가 사용하는 시점까지 미루고 이후 필요할때 로드하는 방식이다.

 

Lazy Loading 패턴을 사용하는 이유 중 하나는 성능 측면에서의 이점을 얻기 위해서다.

특히 초기화 시점에서 리소스를 할당하거나 계산을 하고 싶지 않거나, 해당 리소스가 필요한 경우가 제한적인 경우에 Lazy Loading을 사용한다.

어떤 멤버 변수나 리소스를 선언 시 초기화하는 것은 그 자체로 큰 성능 이슈를 일으키진 않는다.

그러나 프로그램의 시작 시점이나 해당 멤버 변수가 사용될 때까지 초기화할 필요가 없는 경우, 초기화를 미루는 것이 성능적으로 유리할 수 있다.

예를 들어, 어떤 멤버 변수가 초기화되고 계산에 많은 시간이 걸린다면, 해당 변수를 Lazy Loading 패턴으로 초기화하는 것이 사용자 경험과 성능을 향상시킬 수 있다. 사용자가 해당 변수를 실제로 요청할 때까지 초기화를 미루고, 필요한 경우에만 리소스를 할당하고 계산을 수행할 수 있다.

그러나 모든 상황에서 Lazy Loading을 사용하는 것이 항상 최적은 아니다. 필요한 리소스를 너무 늦게 초기화하면 사용자 경험이 저하될 수 있다. 따라서 Lazy Loading을 사용할 때는 초기화를 늦추는 것과 성능 향상 사이에서 적절한 균형을 유지하는 것이 중요하다.

'Development > C#' 카테고리의 다른 글

Cashing  (0) 2023.12.27
Object pooling  (0) 2023.12.27

Simple Used Sample

public class DataFetcher {
    private SomeData cachedData;

    public SomeData GetSomeData() {
        if (cachedData == null) {
            // 캐시된 데이터가 없는 경우에만 데이터를 가져옴
            cachedData = FetchDataFromServer(); // 데이터를 가져오는 시간이 오래 걸리는 작업
        }

        return cachedData; // 캐시된 데이터 반환
    }

    private SomeData FetchDataFromServer() {
        // 서버에서 데이터를 가져오는 작업 (시뮬레이션을 위한 임의의 데이터 생성)
        SomeData data = new SomeData(); // 실제로는 서버 통신 등의 작업을 수행
        return data;
    }
}

public class SomeData {
    // 데이터 구조 정의
}

 

'Development > C#' 카테고리의 다른 글

Lazy Loading Pattern  (0) 2023.12.27
Object pooling  (0) 2023.12.27

Pool Create

using UnityEngine;
using System.Collections.Generic;

public class ObjectPool : MonoBehaviour
{
    public GameObject prefabToPool;
    public int poolSize = 10;

    private List<GameObject> objectPool = new List<GameObject>();

    private void Start()
    {
        InitializeObjectPool();
    }

    private void InitializeObjectPool()
    {
        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = Instantiate(prefabToPool);
            obj.SetActive(false);
            objectPool.Add(obj);
        }
    }

    public GameObject GetPooledObject()
    {
        foreach (GameObject obj in objectPool)
        {
            if (!obj.activeInHierarchy)
            {
                obj.SetActive(true);
                return obj;
            }
        }

        // 오브젝트 풀에 사용 가능한 오브젝트가 없는 경우
        GameObject newObj = Instantiate(prefabToPool);
        newObj.SetActive(true);
        objectPool.Add(newObj);
        return newObj;
    }

    public void ReturnObjectToPool(GameObject obj)
    {
        obj.SetActive(false);
    }
}

 

 

Using Sample

public class YourScript : MonoBehaviour
{
    private ObjectPool objectPool;

    private void Start()
    {
        objectPool = GetComponent<ObjectPool>();
    }

    private void SpawnObjectFromPool()
    {
        GameObject newObj = objectPool.GetPooledObject();
        // 가져온 오브젝트를 사용 (위치 설정 등)
        newObj.transform.position = Vector3.zero;
    }

    private void ReturnObjectToPool(GameObject obj)
    {
        objectPool.ReturnObjectToPool(obj);
    }
}

'Development > C#' 카테고리의 다른 글

Lazy Loading Pattern  (0) 2023.12.27
Cashing  (0) 2023.12.27

사용하려는 경로에 아무 텍스트 파일이나 만들고

 

JDBC URL 란의 사용하려는 파일 이름으로 확장자를 포함해 변경해준다

 

ex)

파일이름.mv.db

'Development > DB' 카테고리의 다른 글

mySQL 공지사항 게시판 참고용 Diagram  (0) 2022.09.14
MySQL  (0) 2022.08.10
Oracle DB #5  (0) 2022.08.09
Oracle DB #4  (0) 2022.08.09
Oracle DB #3  (0) 2022.08.08


프로젝트 구조

.gradle 그래들 build tool 설정 파일들
.idea git 설정 파일들
build 서버에 올리고 실제로 배포되는 컴파일된 파일들

src/main 프로젝트를 만들고 개발자가 사용하는 java와 정적 파일들의 원본
src/test jUnit 테스트를 위해 사용되는 폴더 같은데 알아봐야함

build.gradle 라이브러리 의존성 주입. maven의 pom.xml과 같은 역할을 한다.

외부라이브러리 위에서 의존성 주입한 dependency들이 여기에 컴파일되서 모여있음




inteliJ 단축키

alt+insert getter,setter,생성자,toString 템플릿 불러오기
alt+enter 라이브러리 import
ctrl+alt+L 정렬



뒤에서 돌아가는 서버 종료
netstat -ano
톰캣이면 8080 서버 포트 번호 쓰는 애 확인
taskkill /f /pid 17204  (pid 입력)



라이브러리에서 의존성 내려받는 언어별 build tool들
- Javascript - npm
- Python - pip
- Java - mavenCentral, jcenter

 

 

 

 

흐음... 그렇군요 (저의 뇌 속 시간복잡도는 사용할 수 없는 한계에 다다른듯 함)

 

'Development > Algorithm' 카테고리의 다른 글

java 문법 기본 문제  (1) 2022.09.23



PPA와 update-java-alternatives를 이용한 JDK 설치하기


PPA (Personal Package Archive) 를 이용한 소프트웨어 설치


ppa는 ubuntu를 제공하는 canonical이 함께 운영하는 플랫폼이다

 

canonical 제공 PPA 사이트
https://launchpad.net/

 

개인화된 우분투 패키지를 호스팅도 해주고 사용자가 직접 작성한 패키지를 업로드해서 사용하거나 할 수 있다

(maven 사용할 때 사용자 아키타입 올라가 있는 원격 저장소 생각하면 됨)
이곳에서 원하는 패키지의 주소를 가져온다
 

openjdk ppa ubuntu 구글링

Open JDK 8버전 ppa
검색 결과 : https://launchpad.net/~openjdk-r/+archive/ubuntu/ppa


사이트에서 하라는 대로 그대로 따라 쳐준다

sudo add-apt-repository ppa:openjdk-r/ppa PPA 주소 추가
sudo apt-get update apt resouces 업데이트
apt-cache search jdk | grep jdk 목록에 제대로 업데이트 되었는지 확인
sudo apt-get install openjdk-8-jdk JDK8 버전 설치


openJDK 8버전 설치 완료

java -version 이나 whereis java 로 어디에 있는 어떤 버전을 사용 중인지 확인해본다


기타) Oracle JDK 8버전 ppa (라이선스 있음)
https://launchpad.net/~webupd8team/+archive/ubuntu/java



update-java-alternatives를 이용해 JDK 버전 선택적으로 사용하기

 

update-java-alternatives -l  설치된 java 목록 보기
sudo update-java-alternatives -s packagename packagename으로 jdk 변경



 



<향상된 패키지 관리 도구 APT를 이용한 OpenJDK 설치하기>

 


소프트웨어 설치 with APT (Advanced Packaging Tool)


우분투 패키지 저장소라는 원격 저장소에서 왠만한 툴들을 저장하고 있어서 따로 찾아올 필요가 없다

/etc/apt/sources.list 저장소 정보 목록

 

명령어
apt-get update 저장소 패키지 정보를 업데이트
apt-get dist-update 의존성 검사를 통한 목록 갱신
apt-cache search X 패키지 검색
apt-cache show X 패키지 정보 보기
apt-get install X 패키지 설치
apt-get remove X 패키지 실행파일만 제거
apt-get purge X 패키지 설정파일까지 모두 제거

 

유용한 명령어  
apt-cache pkgnames | less 설치할 수 있는 패키지 less 목록으로 보기
apt-cache search jdk | grep jdk jdk 검색
apt-cache pkgnames | grep jdk 뒤에 붙는 설명을 보기 싫을 때 사용
sudo apt-get install openjdk-11-jdk jdk11버전 설치 (jdk8 버전은 따로 정보를 추가해줘야 한다)


APT cache에 JDK8 버전이 없다면 PPA를 이용해 설치하자


+ Recent posts