반응형

 

 

- 노이즈(Noise)란 무엇인가요?

노이즈는 원하지 않는 소리입니다.
마이크나 스피커, 앰프 등 음향 장비에서 발생할 수 있으며,
전기적인 문제, 연결 상태, 장비 노후 등 다양한 원인으로 생깁니다.

 

 


 

- 대표적인 노이즈 원인 5가지

1. 케이블 불량 또는 접촉 불량

케이블이 낡았거나 단선된 경우 ‘지지직’ 소리가 날 수 있어요.

특히 마이크 케이블(XLR), 스피커 케이블은 사용이 잦아 자주 망가집니다.

꽂는 단자가 헐겁거나 살짝 빠져 있어도 노이즈가 생깁니다.

 

점검 방법 : 케이블을 교체하거나, 흔들어보면서 노이즈 반응을 확인해보세요.

 

2. 장비 간 접지(그라운드)가 불안정할 때

전기가 제대로 빠져나가지 못하면 ‘윙~’ 하는 험(Hum) 잡음이 생깁니다.

콘센트 연결, 멀티탭, 접지 상태가 안 좋을수록 발생할 가능성이 큽니다.

점검 방법 : 접지 단자가 있는 멀티탭을 사용해보세요.

 

DI(Direct Box)의 'Ground Lift' 스위치를 확인

대부분의 DI 박스에는 "GND LIFT" 또는 "GROUND LIFT" 스위치가 있습니다.

접지가 이중으로 걸릴 경우 (악기 → 앰프 → DI → 믹서),
전기적 충돌이 발생해 윙~ 소리 같은 접지 노이즈가 생길 수 있습니다.

이럴 땐, DI의 GND LIFT 스위치 전환해보기 → 접지를 차단해 노이즈가 사라지는 경우가 많습니다.

 

* 단, 모든 상황에 반드시 LIFT가 좋은 것은 아닙니다.

GND ON과 LIFT 모두 시도해보고 소리가 더 깨끗한 쪽을 선택하세요

 

 

3. 무선 마이크 간섭 또는 전파 충돌

근처 방송 장비, 와이파이, 블루투스 신호와 겹치면 끊김, 치직거림이 발생할 수 있어요.

무선 마이크는 반드시 교회 상황에 맞는 주파수로 세팅해야 합니다.

 

 

예배 전, 반드시 채널 간섭 여부를 체크하고 리허설하세요.

 

4. 믹서 게인(Gain)이 너무 높을 때

소리를 키우기 위해 게인을 무리하게 높이면 기기 자체에서 노이즈가 생깁니다.

신호가 약한 상태에서 무작정 증폭하면 '소리'뿐 아니라 '노이즈'도 함께 커집니다.

 

 

마이크와 입의 거리를 조정하고, 게인을 과하게 올리지 마세요.

 

 

5. 장비의 노후 또는 고장

오래된 믹서, 앰프, 마이크는 내부 회로에서 잡음이 생길 수 있어요.

특히 중저가 장비의 경우 시간이 지날수록 노이즈가 늘어납니다.

 

✔ 오래된 장비는 정기적으로 점검하거나 순차적 교체를 고려해야 합니다.

 

 

 

 

- 노이즈 발생시 대처 순서

  1. 노이즈가 나는 장비를 하나씩 꺼보세요.
    → 예: 마이크 채널, 악기 채널, 기타 Aux 채널(카세트, CD 플레이어, PC 등)을 하나씩 뮤트해보며 원인을 찾기
  2. 케이블을 교체하거나 다른 장비에 연결해보세요.
  3. 전원 멀티탭 위치를 바꾸거나, 전원만 단독으로 분리해보세요.
  4. 믹서 게인을 적정 수준으로 낮추고, EQ 세팅도 확인하세요.

 

 

- 정리하며

노이즈는 단순한 불편함을 넘어서,
예배의 집중도와 분위기를 무너뜨리는 요소가 될 수 있습니다.
하지만 그 원인을 알고 차근히 점검하면 대부분 해결할 수 있어요.

음향은 '복잡한 기술'이 아니라 '이해와 반복'입니다.
매주 예배의 소리가 더 깨끗해지길 기도합니다.

반응형
반응형

- 하울링은 어떻게 잡아야 하나요?

예배, 행사 도중 갑자기 “삐이이이익—” 소리가 울려 퍼집니다.
당황한 성도들, 놀란 찬양팀, 긴장하는 음향 담당자…

이 정체불명의 불쾌한 소리의 이름은 바로 하울링(Howling),
또는 피드백(Feedback)이라고 부릅니다.
그렇다면 이 하울링은 왜 생기고, 어떻게 하면 막을 수 있을까요?

 


 

- 하울링이란 무엇인가요?

 

하울링은 마이크가 스피커 소리를 다시 주워서 반복 증폭되면서 발생하는 현상입니다.

쉽게 말하면,

  1. 마이크가 사람 목소리를 수음하고,
  2. 그 소리가 스피커로 나가고,
  3. 다시 그 스피커 소리를 마이크가 다시 주워서
  4. 다시 스피커로 나가고... 이 반복이 되면
    결국 고음이 점점 커지다가 삐익— 하는 불쾌한 소리로 터져 나오는 겁니다.

 


- 하울링을 예방하는 5가지 팁

  • 마이크는 스피커 방향을 피해서 사용하세요
    • 마이크가 스피커를 향하면 하울링 가능성이 높아집니다.
    • 설교용 마이크는 스피커 반대 방향을 향하도록 세팅하세요.
  • 마이크 볼륨(Gain)을 너무 높이지 마세요
    • 소리가 작다고 무작정 볼륨을 올리면 하울링 위험도 같이 올라갑니다.
    • 볼륨 대신 마이크와 입의 거리를 줄이는 것이 더 안전한 방법입니다.
  • EQ로 해당 영역을 살짝 줄여주세요
    • 일반적인 디지털 콘솔에서는 어느 주파수 대역에서 하울링이 발생하는지 볼 수 있습니다.
    • 아날로그 콘솔인 경우 하울림을 듣고 High, Mid, Low를 하나씩 줄여가며 찾아봅니다.
    • 믹서에 EQ(이퀄라이저) 기능이 있다면, 해당 주파수를 살짝 내려보세요.
      ※ EQ(이퀄라이저): 특정 음역대의 크기를 조절하는 기능입니다.
      예: 고음(High), 중음(Mid), 저음(Low)
  • 지나치게 많은 마이크 사용은 피하세요
    • 사용하지 않는 마이크는 반드시 꺼두세요.
    • 동시에 켜진 마이크가 많을수록 하울링 위험도 올라갑니다.
  • 무선 마이크의 배터리를 점검하세요
    • 배터리가 약해질수록 신호가 불안정해져 하울링과 잡음이 생길 수 있어요.
    • 예배 전 무조건 체크!

 


 

- 하울링이 난다면 이렇게 대처하세요

 

  • 침착하게 관찰하세요.
    • 문제가 되는 채널을 찾아야 합니다
    • 마음만 급하면 쉬운것도 보이지 않습니다.
  • 즉시 해당 채널 페이더를 내리세요 (소리를 끄는 것)
  • 원인을 파악하세요
    • 마이크를 들고 있는 사람 관찰 (마이크 위치 및 방향 확인)
    • 볼륨 또는 게인 과다
    • 스피커 방향 확인 (모니터 스피커가 마이크를 정면으로 바라보는 경우)
  • 문제 해결 후 다시 천천히 볼륨을 올리세요

예배 전 리허설 때 하울링 포인트를 미리 확인해두는 것이 가장 좋습니다!

 


 

- 정리하며

 

하울링은 음향 봉사자에게 가장 스트레스를 주는 소리입니다.
하지만 위의 기본 원리와 예방 팁만 잘 지켜도
예배 전체의 집중도와 감동을 지킬 수 있습니다.

음향은 ‘감’이 아니라 이해와 연습입니다.
다음 주 예배에선 삐익 소리 없이,
은혜로운 예배의 흐름을 만들어보세요. 😊

반응형
반응형

 

-- 예배 음향 봉사자를 대신하여 올립니다 --

 

사랑하는 목사님, 그리고 장로님.

예배를 위해 늘 기도하시고 애쓰시는 수고에 감사드립니다.
그 거룩한 현장을 함께 섬기고 있는 음향 봉사자들의 이야기를 조심스레 전해드리고자 합니다.

 


- 음향 봉사는 단순한 일이 아닙니다

 

많은 분들이 음향 봉사를 “마이크만 켜고 끄는 일” 정도로 생각하십니다.
하지만 실제로는 찬양팀과 설교자, 성가대, 성도 전체의 소리가 어우러지는 예배의 중심을 조율하는 일입니다.

예배전 누구보다 먼저 나와 예배를 준비합니다.

  • 찬양 전 리허설 준비
  • 마이크 종류에 따라 볼륨과 음색 조절
  • 각 악기와 보컬의 밸런스 맞추기
  • 설교 중에도 수시로 볼륨 조정
  • 예배 후 장비 정리, 배터리 교체, 점검까지

소리 하나, 잡음 하나가 예배에 방해가 되지 않도록 늘 예민하게 집중하고 있습니다.

 


 

- 작은 실수에도 큰 스트레스를 받습니다

 

예배 중 마이크 소리가 너무 작거나 커졌을 때,
혹은 ‘삐익’ 하는 하울링 소리가 났을 때, 가장 먼저 고개를 숙이는 사람은 음향 봉사자입니다.

많은 경우 그 원인은 예측하기 어려운 돌발 상황이지만,
실수가 발생하는 순간 가장 큰 압박감과 자책은 음향 담당자가 홀로 떠안게 됩니다.

소리를 조절하는 손은 하나지만,
그 안엔 예배 전체의 흐름을 책임지고 있다는 무거운 마음이 담겨 있습니다.

 


- “괜찮아, 수고했어”라는 말이 큰 위로가 됩니다

 

설교자에게 박수는 많아도, 음향 봉사자에게는 말 한마디조차 어려운 구조입니다.
하지만 예배가 끝난 후, 짧게라도 “오늘도 수고 많았어요”, “고맙습니다”라고 말해주신다면
그 한마디가 그들에게는 다음 주를 버틸 힘이 됩니다.

감사함을 표현하는 목회자와 리더의 말 한마디는,
음향 사역이 단순한 ‘봉사’가 아니라 함께 만들어가는 예배임을 느끼게 해줍니다.

 


 

- 음향 사역도 함께 격려해주세요

 

음향은 무대 뒤에 있지만, 예배의 전 흐름을 이끌어가는 중요한 사역입니다.
간혹 실수가 있더라도 이해와 격려로 품어주시고,
매주 함께 예배를 만들어가는 동역자로 바라봐 주신다면
음향 봉사자들도 더 책임감 있게, 기쁨으로 이 사역을 감당할 수 있습니다.

 

 


 

- 마무리하며

음향은 보이지 않는 곳에서 예배를 받쳐주는 섬김입니다.
작은 배려와 감사가 그들의 손끝에 담긴 예배를 더욱 빛나게 할 것입니다.

다음 주 예배가 끝난 후,
가장 먼저 뒤에서 믹서를 바라보고 있는 그 분께 한마디 해주세요.

"오늘도 수고 많았어요. 감사합니다."
그 말 한마디면 충분합니다. 🙏

반응형
반응형

 

[교회 생활] 교회 음향, 왜 중요할까요? 예배에 감동을 더하는 소리의 비밀

 

- 예배에 감동을 더하는 소리의 비밀

주일 아침, 찬양이 시작되었는데 마이크에서 ‘삐이익’ 소리가 납니다.

설교 시간에는 목사님의 말씀이 작게 들려 집중이 되지 않습니다.

 

생각보다 많은 교회에서 음향은 뒷전입니다.

눈에 보이지 않고, 알아주는 사람도 별로 없으니까요.

하지만 음향은 예배의 은혜집중도를 결정짓는 보이지 않는 열쇠입니다.

 


  

- 소리는 감동을 전달하는 통로입니다

예배의 핵심은 하나님과의 교제입니다. 그런데 그 교제는 말씀과 찬양을 통해 이루어지죠.
말씀이 잘 들리지 않거나 찬양의 소리가 균형이 맞지 않으면, 그 은혜의 통로가 흐릿해질 수밖에 없습니다.

 

✔️ 찬양팀의 하모니가 잘 들릴 때
✔️ 말씀 한 마디 한 마디가 명확하게 전달될 때

 

사람들의 마음은 더 열리고, 감동은 더 깊어집니다.

 


  

- 음향은 단순한 '기술'이 아닙니다

많은 분들이 음향을 기계 다루는 일 정도로 생각합니다. 믹서, 마이크, 스피커… 복잡하고 어렵게 느껴지기도 하죠.

혹은 단순히 마이크를 ON/OFF하는 단순 노동정도로 생각합니다.

 

하지만 음향 봉사는 기술 이전에 ‘배려’의 섬김입니다.
예배에 참석한 모든 사람이 편안하게 찬양하고, 또렷이 말씀을 들을 수 있도록 돕는 것. 그것이 음향 봉사의 본질입니다.

 


 

- 작은 실수도 큰 영향을 줄 수 있어요

  • 마이크 소리가 갑자기 커졌다 작아지면?
    말씀에 집중하던 흐름이 끊깁니다.
  • 성가대 소리가 너무 크면?
    회중은 따라 부르지 못하고 관람객처럼 느껴질 수 있습니다.
  • 하울링(삐익 소리)이 반복되면?
    예배 분위기가 위축되고, 참석자들은 불편함을 느낍니다.

이처럼, 음향은 잘되면 거의 티가 나지 않지만, 잘못되면 즉시 전체 분위기에 영향을 미칩니다.

 


 

- 그래서, 누가 음향을 담당해야 하나요?

 

전문가가 아니라도 괜찮습니다. 중요한 건 관심과 책임감입니다.
기초적인 원리와 장비 조작법을 차근차근 익혀간다면, 누구든지 충분히 감동 있는 예배를 위한 음향을 만들어갈 수 있습니다.

 


 

- 감동의 예배는 ‘좋은 소리’에서 시작됩니다

 

음향은 단지 뒷자리에서 버튼을 누르는 일이 아닙니다.
예배 전체를 받쳐주는 은혜의 기술이자 섬김의 자리입니다.

예배에 집중이 어려운것은 이해합니다.

하지만 집중하지 않아도 된다는 합리화의 핑계가 되진 않습니다.

그렇기에 어려운 자리입니다.

힘듭니다.

하지만 그만큼의 보람이 있는곳이기도합니다.

 

반응형
반응형

[.NET MAUI] 안드로이드에서 구글 광고 연결하기 (Admob 달기)

 

.NET MAUI는 안드로이드 어플 개발이 가능하다.

따라서 많은 안드로이드 어플에 추가되어있는 Admob 광고도 추가가 가능하다.

 

 


1. Nuget에서 Plugin.MauiMTAdmob를 설치한다.

 

.net maui Admob 연결하기, 애드센스 연결하기

 

MauiMTAdmob을 설치한다.

 

 

** 에러 발생시

.net maui Admob 연결하기, 애드센스 연결하기

 

 

위와 같은 에러가 발생하면 'Nuget-설치됨' 에서 각각의 패키지를 찾아 업데이트 해준다.

 

.net maui Admob 연결하기, 애드센스 연결하기

 

 

 


2. MauiProgram.cs 파일 수정

 

위의 두곳에 내용을 추가한다.

 

using Microsoft.Extensions.Logging;

using Plugin.MauiMTAdmob;  // 추가

namespace Admob_Test
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                
                .UseMauiMTAdmob()  // 추가

                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });
                
#if DEBUG
    		builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
    }
}

 

 

 


3. Platforms - Android - MainActivity.cs에 내용 추가

using Android.App;
using Android.Content.PM;
using Android.OS;

using Plugin.MauiMTAdmob;  // 추가

namespace Admob_Test
{
    [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
    public class MainActivity : MauiAppCompatActivity
    {
    	// 추가
        protected override void OnCreate(Bundle? savedInstanceState)
        {
            string appId = "AppID"; // Admob에서 AppID 입력하기
            CrossMauiMTAdmob.Current.Init(this, appId);

            base.OnCreate(savedInstanceState);
        }

        // 추가
        protected override void OnResume()
        {
            base.OnResume();
            CrossMauiMTAdmob.Current.OnResume();
        }
    }
}

 

네가지를 추가해줘야 한다.

1) using Plugin.MauiMTAdmob;

2) Oncreate Override 추가

3) OnResume Override 추가

4) Admob에서 받은 AppID를 추가해야 한다.

 


4. Banner 광고 추가 하기

4-1. MainPage.Xaml에 AdMMTAdView 컨트롤 추가

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             
             xmlns:admob="clr-namespace:Plugin.MauiMTAdmob.Controls;assembly=Plugin.MauiMtAdmob"
             
             x:Class="Admob_Test.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">

            <admob:AdMMTAdView HeightRequest="50" 
                               x:Name="adViewTT"
                               AdSize="Banner" 
                               VerticalOptions="EndAndExpand" 
                               HorizontalOptions="CenterAndExpand" />

        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

 

1) xmlns:admob="clr-namespace:Plugin.MauiMTAdmob.Controls;assembly=Plugin.MauiMtAdmob" 를 추가한다.

2) <admob:AdMMTAdView /> 컨트롤을 추가한다.

 

 

4-2. MainPage.cs 비하인드 코드에서 연결

namespace Admob_Test
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();


			// Admob 배너 광고 ID
            if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
            {
                // 테스트 광고 ID
                adViewTT.AdsId = "ca-app-pub-3940256099942544/6300978111";
            }

        }
    }

}

 

Admob 광고 ID를 컨트롤에 추가해준다.

 

 


5. 전면 광고 추가하기

5-1. MainPage.xaml에서 Button 생성, Click Event 추가

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             
             xmlns:admob="clr-namespace:Plugin.MauiMTAdmob.Controls;assembly=Plugin.MauiMtAdmob"
             
             x:Class="Admob_Test.MainPage">

    <ScrollView>
        <VerticalStackLayout
            Padding="30,0"
            Spacing="25">
            
            <!--전면 광고 버튼 추가-->
            <Button x:Name="btn_Ads"
                    Clicked="btn_Ads_Clicked" />
            
        </VerticalStackLayout>
    </ScrollView>

</ContentPage>

 

전면광고를 위한 Button 컨트롤을 추가하고 Clicked 이벤트를 추가한다.

 

 

5-2. MainPage.cs 비하인드 코드에서 이벤트 내용 추가

using Plugin.MauiMTAdmob;

namespace Admob_Test
{
    public partial class MainPage : ContentPage
    {
        int count = 0;

        public MainPage()
        {
            InitializeComponent();
        }

		// 추가
        private void btn_Ads_Clicked(object sender, EventArgs e)
        {
        	// 테스트 광고 ID
            string Id_Interstitial = "ca-app-pub-3940256099942544/1033173712";

            if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
            {
                CrossMauiMTAdmob.Current.LoadInterstitial(Id_Interstitial);
                CrossMauiMTAdmob.Current.ShowInterstitial();

            }
        }
    }

}

 

Button Click 이벤트의 내용을 추가한다.

광고를 LoadInterstitial에 광고 ID로 로드하고

ShowInterstitial로 광고를 표시한다.

 


[TIP] Interstitial 로드 빠르게 하는 팁

위의 코드로 전면 광고를 호출하면 한박자 늦에 표시되는 것을 알 수 있다.

구글 Admob에 광고를 요청 - 수신 한 뒤 보여주는 로직이라 통신 시간이 소요된다.

이 문제는 간단하게 해결 가능하다.

using Plugin.MauiMTAdmob;

namespace Admob_Test
{
    public partial class MainPage : ContentPage
    {
        int count = 0;

        public MainPage()
        {
            InitializeComponent();
        }
		
        // 화면 로딩과 함께 광고 내용을 Load
        protected override void OnAppearing()
        {
            base.OnAppearing();

            string Id_Interstitial = "ca-app-pub-3940256099942544/1033173712";

            if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
            {
                CrossMauiMTAdmob.Current.LoadInterstitial(Id_Interstitial);
            }
        }
		
        // 전면 광고가 필요한 상황에서 ShowInterstitial()로 광고를 표시한다.
        private void btn_Ads_Clicked(object sender, EventArgs e)
        {
            if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
            {
                CrossMauiMTAdmob.Current.ShowInterstitial();
            }
        }
    }
}

 

위에서는 OnAppearing()에 LoadInterstitial()에 추가했지만 Task등을 이용해 비동기처리를 해도 무방하다.

반응형
반응형

LDF Viewer

 

차량 통신에서 사용되는 가장 흔한 통신 방식은 2가지가 있다.

LIN 통신과 CAN 통신이다.

 

이중 LIN 통신은 보통 LDF 파일을 생성한다.

LIN 통신에서 필요한 요소들에 대한 일종의 명세서다.

  • 통신 속도 등의 기본 통신 명세
  • Master/Slave 노드
  • 각 메시지들의 형식
  • 데이터의 형식
  • 주기적 스케줄에 대한 명세
  • 인코딩에 대한 명세

 

물론 메모장이나 기타 다른 프로그램으로 파일 내용 확인이 가능하다.

하지만 보기 불편하다.

그래서 만들었다.

 

 

https://play.google.com/store/apps/details?id=com.LFC.LinViewer&pli=1

 

Ldf 뷰어 - Google Play 앱

Lin Ldf viewer

play.google.com

 

 

사용법은 간단하다.

LDF파일을 선택하기만 하면 상세 내용이 나오게된다.

 

 

0123

 

 

안드로이드 태블릿에서도 사용 가능한 어플이다.

 

또한 번외로 PC에서 무설치로 사용 할 수 있도록 웹으로도 만들었다.

 

 

https://fasttool.co.kr/

 

Fast Tool

여러 CSV파일을 하나의 파일로 요약합니다.

fasttool.co.kr

 

 

LDF뷰어 뿐만 아니라 평소 내가 자주 사용하는 단위 변환기도 있다.

 

 

모두 무료이니 비용 걱정은 없다.

편히 사용하면 된다.

반응형

'일지 > 앱 개발' 카테고리의 다른 글

언제까지 놀고만 있을 순 없다. (.NET Maui)  (0) 2025.03.18
반응형

나는 프로그래머다.

다른 웹개발, 게임 개발자와 다른 SI 계열의 프로그래머다.

항상 공장, 기계와 함께한다.

기계를 조작하는 프로그램, 시험 측정 프로그램, 공장 상황을 체크하는 MES 프로그램을 만드는 프리랜서이다.

자동차 분야에서 활동하면서 근 몇년간 너무 많은 변화가 일어나고 있다.

현대/기아에 의존하던 기존 자동차 부품업체들이 급격한 변화를 맞이하고 있다.

기존 차량 부품을 사용하지 않는다.

그래서 일의 부익부 빈익빈이 가중화 되고있다.

 

그래서 나도 변화해야한다.

어떻게 할 것인가 막막했다.

그래서 단기적 목표를 가지고 도전해보려한다.

 

안드로이드 어플리케이션을 만들려 한다.

이유는 간단하다.

프로그램을 만들고 게시할 마켓이 있다.

UWP를 이용한 Microsoft Store도 있지만 아직은 파이가 크지 않다.

IOS계열은 내가 잘 사용하지 않는다. (평생 안드로이드만 써왔다.)

 

개발 언어는 고민할 필요 없이 .Net Maui로 선택했다.

이유는 간단하다.

1. C#으로 프로그램을 만들 수 있다.

2. Cross Platform으로 Android, IOS, Window, Tizen 등의 환경에서 사용 할 수 있다.

  (물론 각 환경에 맞는 설정은 별도로 필요하다)

3. 어짜피 필요한 기능들은 웹을 통해야 한다.

  (나에게는 AWS Lambda 라는 강력한 도구가 있다.)

 

이제 어플 100개 만들기를 도전해보려 한다.

이건 일종의 나의 개발 일지다.

또한 일종의 광고이다.

이렇게 해야 책임감을 갖고 이 프로젝트가 이어질 것이라 생각된다.

 

이미 늦었다 이야기 하는 사람도 있다.

하지만 시작도 안하면 계속 후회만 하고 있을것이다.

후회하지는 말자..

반응형

'일지 > 앱 개발' 카테고리의 다른 글

[앱001] LDF Viewer (Lin Description File Viewer)  (0) 2025.03.18
반응형

코틀린에서는 특이한 점이 하나 있다. (물론 내가 c#개발을 했었어서일수도 있다.)

 

int a;
a = 1;
Console.WriteLine(a)

// 1

 

c#에서는 위와같이 int a를 변수명 선언만 한 뒤 a의 값을 나중에 할당해도 된다.

 

하지만 코틀린에서는 에러가 발생한다.

 

 

이를 해결하기 위해 사용하는 키워드가 바로 lateinit / lazy다.

 

 


1. lateinit (kotlin아! 값은 나중에 알려줄께..)

lateinit var name : String

name = "Kim"

println(name)


// Kim

 

위에서 언급한 C#과 파이썬등 여러 언어들과 동일한 방법이다.

lateinit이라는 키워드로 나중에 값을 할당할것이라고 kotlin에게 알려준 뒤,

필요할 때 값을 넣어주는 방법이다.

여기엔 몇가지 제한 조건이 있다.

  • var 변수에만 사용이 가능하다.
    • 당연하다. val 타입은 추후에 값을 못바꾸기 때문에 불가능하다.
  • nullable 자료형을 사용 할 수 없다.
  • 초기화하기 전에 변수를 호출하면 에러가 발생한다.
    • 값이 없는 상태이기에 반환 할 값도, 주소도 없다.
    • 변수명.isInitialized()로 초기화가 되었는지 확인 가능하다.
  • 원시 자료형에는 사용이 불가능하다.
    • Int, Double, Float, Bool 등..

2. lazy (미리 값은 알려주는데 내가 값을 넣으라 할때까지 기다려봐)

val lazyVar : String by lazy {
    println("초기화 되었습니다 1.")
    println("초기화 되었습니다 2.")
    "Lazy 키워드"
}


println(lazyVar)
println("------------")
println(lazyVar)


// 초기화 되었습니다 1.  // 초기화 동작으로 인한 출력
// 초기화 되었습니다 2.  // 초기화 동작으로 인한 출력
// Lazy 키워드          // 초기화 동작으로 인한 출력, "Lazy 키워드" 값이 lazyVar에 할당 / 반환
// ------------
// Lazy 키워드          // lazyVar에 할당된 값 반환

 

lazy는 val만 사용 가능하다.

다시말해 변경 불가한 값이다.

처음 변수를 선언할때 '나중에 호출하면 이런 값을 할당해줘' 라는 방법(혹은 레시피)를 미리 선언해 놓는다.

위의 코드처럼 println()등도 함께 호출 가능하다.

 

변수가 호출되는 시점에 초기화가 진행되면서 lazy블록 안에 있는 코드가 실행되고 "Lazy 키워드"라는 값이 lazyVar에 할당된다.

그리고 이후에 호출이 되면 "Lazy 키워드"만 반환된다.

(위의 출력값에 "초기화 되었습니다. 1", "초기화 되었습니다. 2", "Lazy 키워드"가 나오는 부분은 초기화 되면서 실행된 값들이다.)

(맨 마지막줄 "Lazy 키워드"는 초기화가 완료되었기에 다른 문구 없이 lazyVar에 할당된 값만 출력되게 된다.)  

 

용량이 큰 자료를 데이터값으로 사용해야 할때 프로그램 실행시부터 메모리에 올려놓게되면 메모리의 효율성이 떨어진다.

(10년뒤 사용할 휴지100묶음을 지금부터 방에 놔두는 꼴이 된다.)

그래서 필요시에 할당해 사용하기위해 주문서만 만들어놓고 필요할대 주문해 사용하는 방법인것이다.

반응형

+ Recent posts