728x90

#저의 주관적인 경험과 생각을 바탕으로 작성하오니, 필요부분만 챙기시고, 불필요한 내용들은 넘어가셔도 좋습니다.

 

1. 태아 보험이란?

어린이 보험 + 태아 특약이 있는 보험 입니다.

즉. 어린이 보험이 주이고, 태아 보험은 특약으로 이루어져 있습니다.

 

2. 태아 보험 언제까지 가입이 가능한가?

22주 안에 어린이 보험에 가입하는 것을 추천합니다.

22주가 지나면 태아와 관련된 특약에는 가입할 수 없는 것이 일반적이기 때문입니다.

단. 어린이 보험 가입은 가능합니다.

 

3. 태아 보험 과연 필요할까?

문제를 가지고 태어나는 아기가 몇명이나 될까?

제 주변만 보아도 거의 일어나지 않는 일이기에 의문이 생겼습니다.

아직 태어나지 않은 태아의 경우 사실상 보험이 필요가 없기 때문에 미리미리 줄서서 보험사에 돈을 갖다주는 형국인거 같았습니다.

하지만, 반대로 생각해보면, 혹시라도 아기가 선천성 질환 등과 같은 문제를 안고 태어난다면 실손보험 가입이 어렵기 때문에 아프지 않을때 가입하는게 좋을 수도 있습니다.

이건 각자 생각에 따라 다르니, 각자의 생각에 맏기겠습니다.

 

3.1 태아 보험 필요하다면 가격대와 보장기간은 어떻게 할까?

30세 만기 후 갱신을 통한 보험 가입을 하시는 경우 갱신 전 아플 경우 해당 부분에 대해서는 갱신이 안될 수도 있습니다.

보험은 30세만기 위주와 30세 80세 or 100세 가성비 위주, 그리고 전부 100세 위주로 구성으로 나누어져 있습니다.

제 주위에는 30세만기와 가성비 위주가 비등비등했고, 100세 만기는 몇명 없었습니다.

일단.. 저는 가성비 위주로 커버 가능한 보장은 30세, 꼭 가지고가야하는 보장들은 80세로 조절 했습니다.

 

30세 만기를 선호 하시는 유형

가격이 저렴하다. 4~5만원대 가격
30세면 클만큼 컷다. 이제 너가 알아서 해라~

30세 80세 100세 필요한 기간을 두루두루 선택한 가성비 유형

30세 80세 100세를 섞어서 설계한 가성비 유형. 30세면 너무 보장 기간이 짧다. 7~8만원대 가격
30세 전환 가능하여도 아프면 도로묵. 중요한 것들은 기간을 길게~
중요도가 낮은 것들은 30세로 정리

100세 만기형 유형

100세 만기형 유형아무것도 걱정하고 싶지 않다. 11~15만원대 가격

 

4. 태아 보험사 선정 어떻게 할까?

태아보험은 H해상, M화재가 이 두 회사에서 많이 가입합니다.

태아 보험을 처음 선보인 H해상과 H해상을 따라 잡으려는 M화재..

#가격과 보장 내역 비교를 위해서는 여러군데 계약서를 받아서 확인해보시는 것을 추천합니다.

제가 생각 한 두 보험사의 특징

동일 암으로 여러번 수술 받아야 한다면, "M화재"

여러 종류의 암을 한번씩만 수술 받아야 한다면, "H해상"

 

 

 

#저의 주관적인 경험과 생각을 바탕으로 작성하오니, 필요부분만 챙기시고, 불필요한 내용들은 넘어가셔도 좋습니다.

 

5. 필수 담보와 불필요 담보?

꼭 필요한 담보 _ 4가지

1) 암진단(유사암 제외)
2) 유사암진단담보
3) 뇌혈관질환진단담보
4) 허혈심장질환진단담보

이렇게만 하셔도, 암에 대한 보장은 대부분 커버가 가능하십니다.

 

불필요한 보장 _ 10가지

1. 깁스치료담보
가벼운 깁스 보장X
무조건 통깁스만 보장

2. 5대골절진단담보
팔.다리 골절 보장X
두개골, 목 같은 심각한 골절만 보장

3. 시력담보
보장 받는 조건이 어려움

4. 치아치료
영구치 이후 가입하여도 무방

5. 부정교합치료
돌출형이 아니라면 보장X

6. 폭력피해
상해 발행으로 입원치료 또는 통원 치료시 실비로 처리 가능

7. 유괴납치피해담보
음...

8. 자동차사고 부상(비운전중) 담보
자동차와 실비로 보장 가능

9. 성조숙증진단 담보

10. 아토피/틱장애 진단 담보
보장액이 적기에 삭제

 

6. 올바른 보장 내역 확인 방법 _ 5가지 과정

설계사마다 보장내역과 보장기간 보장금액이 다릅니다.

그래서 저는 설계사들에게 원하는 금액대와 꼭 필수인 보장내역을 포함하여, 견적서를 요청하였습니다.

견적서는 총 7개 받았으며, 7개에 대해 비교를 해보니, 필요없는 부분은 전부 들어가 있었으며, 보장 기간과 보장 금액도 동일 하였으나, 필요한 부분은 대해서는 보장 기간과 보장 금액에 대한 차이가 있었습니다.

하나하나 비교를 하다보면 같은 회사라도, 설계사마다 생각이 다르기 때문에, 보장 내역이 빠진 것도, 추가 된 것도 있습니다.

1차. 노트 하나 준비하시고, 꼭 필수 보장 내역과, 필요 없는 보장 내역을 정리하세요.

정리된 필수 보장 내역들의 보장 기간과 보장 금액을 작성해 봅니다.

2차. 궁금한점은 미리미리 메모를 하여, 설계사와 대면 설명 또는 전화 설명을 통하여, 꼼꼼히 하나하나 설명을 들으며, 메모한 내용들에 대해서 설명을 듣습니다.

3차. 2차에서 설명들은 내용을 토대로 다시 한번 점검을 합니다.

4차. 3차에서 점검한 내용과 필요없는 부분은 삭제 요청을 한 뒤, 설계서를 다시 요청합니다. 

      (정말 필요없다고 생각하는 부분 삭제하니 월 천원~이천원 감소하였습니다.)

5차. 설계서를 받아서 요청한 내용들이 정확히 반영 되었는지 확인합니다.

 

 

7. 보험료 낮추는 방법

1) 입원일당 금액이 보험료에서 가장 큰 비중을 차지 합니다.

   ▶ 보장 기간을 30세 또는, 초등학교 이후에 삭제를 하여 금액을 낮출 수 있습니다.

2) 전체적으로 30세 만기로 설정 또는 30세와 80세를 적절하게 사용하여, 보험를 설계합니다.

3) "적립율" 없는 걸로 해주세요. 하시면 됩니다.

   ▶ 그러면 설계사는 알아서 적립율이 제일 작은 것으로 안내 할 것 입니다.

    OR "무해지환급형"을 선택하면 됩니다.

4) 무해지 환급형이란?

일반 보험 상품의 경우 납입기간 중 어떠한 사유로 해지를 할 경우 보험사로 부터 해지환급금을 조금이나마 받을 수 있지만, 무해지 환급형의 경우에는 해지환급금을 거의 받지 못하는 조건으로 보험료를 낮춘 상품입니다.

4-1) 무해지 환급형의 비밀

무해지 환급형은 가격(30%정도)이 조금 저렴한 대신 30세 만기로 했을 경우, 가입금 외 별도로 개별 기간을 조정 할 수 없으며, 가입 만기도 30세가 아닌 더 길게 선택을 해야합니다. 또한 가입이 안되는 특약도 있으므로, 꼼꼼한 비교가 필수 입니다.

728x90
728x90

VirtualBox와 Fedora Linux 파일을 설치하시려면 https://clear-sky-sun.tistory.com/11 를 참조하세요.

아무것도 몰라도 차근차근 따라오면 이해 하실 수 있습니다.

 

1. 새로 만들기를 선택하세요.

 

2. 이름 작성, 종류 선택, 버전 선택하세요.

 

3. 메모리 크기는 다음과 같습니다. 다음을 선택하세요.

 

4. 처음 만드는 사용자는, '지금 새 가상 하드 디스크 만들기'를 선택하세요.

 

5. VDI 선택 후, 다음을 선택합니다.

  • VDI
  • Oracle 버추얼박스에서만 사용 가능한 포멧입니다.
  • 다른 PC에서 복사하여 사용 할 때, 버추얼 박스가 설치 되어야 사용 가능합니다.
  •  
  • VHD
  • Oracle 버추얼박스와 마이크로 소프트사의 Hyper-v, 시트릭스의 Xen 호환가능한 포멧 방식입니다.
  • 다른 PC에서 복사하여 사용 할 때, 버추얼박스, Hyper-v, Xen이 설치 되어야 사용 가능합니다.
  •  
  • VMDK
  • 버추얼박스, VMware의 VMware Player 호환 가능한 포멧 방식입니다.
  • 다른 PC에서 복사하여 사용 할 때, 버추얼박스, VMware Player이 설치 되어야 사용 가능합니다.

 

6. 동적 할당과 고정 크기 중 선택 후, 다음을 선택합니다.

 

7. 기본은 8GB로 입력 되어있으며, 사용자는 디스크 크기를 변경하여 만들 수 있습니다.

 

8. 설정을 선택하세요.

 

9. 저장소를 선택합니다.

 

10. 비어 있음을 선택 후,  CD 아이콘을 선택합니다.

 

11. Choose adisk file..을 선택하여, Fedora-Workstation-Live-x86_64-31-1.9를 선택합니다.

 

12. 입력 된 것을 확인 할 수 있습니다. 시작을 눌러줍니다.

 

13. Start Fedora-Workstation-Live 31 선택합니다.

 

14. 기다려줍니다.

 

15. Install to Hard Drive를 선택합니다.

 

16. 한국어를 선택합니다.

 

17. 설치 목적지를 선택합니다.

 

18. 완료를 선택합니다.

 

19. 설치 시작을 선택합니다.

 

20. 소프트웨어 설치가 완료 될 때까지 기다림니다.

 

21. Finish Installation 선택합니다.

 

22. 전원 버튼을 누릅니다.

 

23. 전원버튼을 눌러주세요.

 

24. Power Off를 선택합니다.

 

25. 설정을 선택합니다.

 

26. 저장소에서 CD모양을 선택한 뒤, 가상 드라이브에서 디스크 꺼내기를 합니다.

 

27. 확인을 선택합니다.

 

28. 비어있는 것을 확인 한 뒤, 시작 버튼을 선택합니다.

 

29. fedora가 시작 됩니다.

 

30. 다음을 선택합니다.

 

31. 다음을 선택합니다.

 

32. 건너뛰기를 선택합니다.

 

33. 이름을 작성합니다.

 

34. 암호를 설정합니다.

 

35. Fedora 시작를 선택합니다.

 

36. Fedora가 시작 되었습니다.

728x90
728x90

Linux 시작하기!!

버추얼박스(VirtualBox)

https://www.virtualbox.org/wiki/Downloads

 

1. 현재 VirtualBox는 6.1 버전을 가지고 있습니다.

 

 

2. VirtualBox 6.1.2 platform packages 중에서 원하는 packages를 선택하세요.

  •  Windows hosts

  •  OS X hosts

  • Linux distributions

  •  Solaris hosts

 

페도라(fedora)

https://getfedora.org/

 

Get Fedora

Choose Freedom. Choose Fedora. Pick a flavor of Fedora streamlined for your needs, and get to work right away.

getfedora.org

1. Fedora 사이트에 접속 합니다.

 

2. Fedora 31:x86_64 DVD ISO 선택 합니다.

OnLiux or just want an ISO file

- 일반적으로 CD 또는 DVD의 전체 이미지를 포함하는 아카이브 파일입니다. 예를 들어 Windows, Linux 및 macOS와 같

  은 대부분의 운영 체제는 ISO 이미지로 배포됩니다.

 

VirtualBox와 Fedora 설치 파일을 다운 받았습니다.

 

VirtualBox 설치 진행

순서대로 진행하시면 됩니다.

VirtualBox 설치 완료 하였습니다.

 

다음 페이지에서 VirtualBox에 Fedora 리눅스를 진행 하겠습니다.

https://clear-sky-sun.tistory.com/12 ◀에서 확인 가능합니다.

728x90

'PHP' 카테고리의 다른 글

[PHP] 접속한 IP 주소 확인 방법  (0) 2020.06.02
bash bc와 expr 차이점  (0) 2020.03.30
E325: ATTENTION vi swap 해결 방법  (0) 2020.03.23
페도라 리눅스 vim 설치 방법  (0) 2020.03.03
[리눅스] VirtualBox에 Fedora Linux 설치  (0) 2020.02.18
728x90

1. 목표

쉽고 간단한 이메일 보내기를 만들고자 합니다.

App 안에서 메일을 작성하여 자동으로 등록된 이메일 주소로 보내고자 합니다.

이메일을 보내기 위해서 아웃룩(outlock) 이메일을 이용 하여, 메일을 보낼 것입니다.

 

2. 코더

SendEmail.xaml

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <TextBlock Text="Send Mail" FontSize="25" Grid.Row="0" FontWeight="Bold"/>
        <TextBlock Margin="5,10,0,0" Text="To" Grid.Row="1" FontSize="20"/>
        <TextBlock Margin="0,10,10,0" Name="tomail" Grid.Column="1" Grid.Row="1"
                   Text="주 Eamil은 등록되어 있으므로, 작성 할 수 없습니다."/>
        <TextBlock Margin="5,10,0,0" Text="CC" Grid.Row="2" FontSize="20"/>
        <TextBox Margin="0,10,10,0" Name="ccmail" Grid.Column="1" Grid.Row="2"
                 PlaceholderText="참조하려는 Email 작성하세요."/>
        <TextBlock Margin="5,10,0,0" Text="Subject" Grid.Row="3" FontSize="20"/>
        <TextBlock Margin="0,10,10,0" x:Name="subject" Grid.Column="1" Grid.Row="3"
                   Text="자동으로 현재 날짜인 월과 일이 표시 됩니다."/>
        <TextBlock Margin="5,10,0,0" Text="Body" Grid.Row="4" FontSize="20"/>
        <TextBox Margin="0,10,10,0" Name="body" Grid.Column="1" Grid.Row="4" Height="100" TextWrapping="Wrap"
                 PlaceholderText="내용을 입력하세요."/>
        <Button Margin="0,10,10,0" HorizontalAlignment="Left" Content="Send" Name="sendEmail"
                Grid.Column="1" Grid.Row="5" Click="SendEmail_Click"/>        
  

 

 

SendEmail.xaml.cs

private async void SendEmail_Click(object sender, RoutedEventArgs e)
        {

            string ccmailstr = ccmail.Text.ToString();
            EmailMessage email = new EmailMessage();
            email.To.Add(new EmailRecipient(tomail.Text = "J'code@gmail.com"));

            if (ccmail.Text.Length == 0) //CC에 대한 내용이 없어도 오류가 나지 않도록 예외 처리
            {
                System.Diagnostics.Debug.WriteLine("CC = 0");
            }
            else
            {
                email.CC.Add(new EmailRecipient(ccmail.Text)); System.Diagnostics.Debug.WriteLine("CC != 0");
            }

            subject.Text = DateTime.Now.ToString("yyy/MM/dd 자료입니다. ");
            email.Subject = subject.Text;
            email.Body = body.Text;

            await EmailManager.ShowComposeNewEmailAsync(email);            
        }

 

3. 결과

 

내용을 입력하고 보낼 경우!

 

내용을 입력하지 않고, Send Button 눌렀을 경우!

 

이메일에서 첨부파일을 추가하고 싶다면, ▶ https://clear-sky-sun.tistory.com/10 ◀을 확인 해주세요.

728x90
728x90

 

 

네스프레소 에센자 미니 C30 화이트 현재 국내 구입가 : 159,000원(무료배송)

네스프레소 에센자 미니 C30 화이트 독일 직구 구입가 : 94000원(무료배송)

차액 : 65000원 ...(생각보다 크다...)

A/S : 국내/직구 구매 둘다 가능합니다.

어댑터(유/무) : 돼지코 어댑터 필요 없음. (한국형과 동일)

구성품 : 국내/직구 둘다 동일 (네스프레소 시음 캡슐 개수도 동일)

추출 압력 및 예열 : 국내/직구 둘다 동일(19 bar)

배송기간 : 4일(우체국 택배)

여러 가지 비교를 통하여 J'code는 직구를 선택하였습니다.

 

 

 

 

0

주말이면 늘 커피 한잔으로 아침을 깨우는 나. 드디어 에센자 미니 C30을 만났습니다.

작고 안증맞은 크기에 놀라고, 성능도 동일하다는 것에 한번 놀랐습니다.

박스를 오픈하니, 사용설명서와 머신 기계, 시음 캡슐이 들어있습니다.

 

이 글을 보시는 구매 예정 유저분들이 크기를 알기 쉽도록 연필 길이와 물통 길이를 비교!!

 

딱 보아도 심플하고 조그마하게 생겼습니다.

어디에 놓아도 공간 차지 없이 사용이 가능합니다.

 

간단하게 버튼은 두가지로, 양 조절 버튼입니다.

왼쪽은 아이스 아메리카노 마실때, 커피 원액을 뽑아서 얼음과 물을 더해주면 됩니다.

오른쪽은 뜨거운 아메리카노 마실때 사용하면 됩니다.

 

캡슐을 넣기 위해 손잡이 부분을 열었고, 캡슐을 넣고 닫아주면 끝...!!!

돌체구스토처럼 캡슐을 다시 빼줄 필요 없이, 손잡이를 다시 열어주면 캡슐이 쑉하고 밑으로 빠져나가요.

 

다 사용한 캡슐은 한곳에 모여있습니다. 최대 6개 들어가네요.

 

컵 받침대가 있어서 종이컵 사이지는 올릴 수 있지만, 머그컵은 안됩니다.

컵 받침대 제거 후 머그컵을 사용한다면 사용이 가능합니다.

전 컵 받침대 제거 후 사용을 하는데, 사용에 문제가 없습니다.

 

숏과 롱 차이가 얼마나 발생 하는지 확인을 위해 종이컵으로 확인을 해보았습니다.

그림으로 표시를 통해 좀 더 정확하게 숏과 롱 차이를 추측 할 수 있습니다.

 

네스프레소 홈페이지(https://www.nespresso.com/)에서 머신기계 등록을 완료 하였습니다.

 

 

 

지금까지 J'code choice 였습니다.

728x90
728x90

1. 구성

페이지에서 다른 페이지로 넘기는 데이터 넘기는 네비게이션 사용방법에 대해서 알아보고자 합니다.

구성은 페이지2 세트와 클래스 1개로 이루어져있습니다.

프로그램 실행은 압축 파일을 통하여서도 실행이 가능합니다. 

 

2. 코더

MainPage.xaml

	<StackPanel >
            <StackPanel.Resources>
                <Style TargetType="Button">
                    <Setter Property="Width" Value="200"/>
                    <Setter Property="Margin" Value="0,10,0,0"/>
                </Style>
            </StackPanel.Resources>
            <StackPanel Orientation="Vertical" Padding="150">
                <TextBox x:Name="MainName1" PlaceholderText="1번째" FontSize="35" />
                <TextBox x:Name="MainName2" Text="2번째" FontSize="35" />
                <Button x:Name="btnname1" Content="Blank Page로 이동합니다." Click="Btnname1_Click"/>
            </StackPanel>
            <StackPanel Margin="150,50,0,0" Orientation="Vertical">
                <Button x:Name="btnGo" Content="글자 이동" Click="BtnGo_Click"/>
                <TextBlock x:Name="MainBlock1" Text="첫번째." FontSize="35"/>
                <TextBlock x:Name="MainBlock2" Text="두번째." FontSize="35"/>
            </StackPanel>
        </StackPanel>

MainPage.xaml.cs

        private void Btnname1_Click(object sender, RoutedEventArgs e)
        {
	    this.Frame.Navigate(typeof(BlankPage), this.MainBlock2.Text);
            this.Frame.Navigate(typeof(BlankPage), this.MainBlock1.Text);
        }

        private void BtnGo_Click(object sender, RoutedEventArgs e)
        {
            var student = new Student { MainName1 = MainName1.Text, MainName2 = MainName2.Text};
            Frame frame = Window.Current.Content as Frame;
            frame.Navigate(typeof(BlankPage), student);

            MainBlock1.Text = String.Format("{0}", MainName1.Text);
            MainBlock2.Text = String.Format("{0}", MainName2.Text);
        }

 

BlankPage.xaml

	<StackPanel Margin="150" Orientation="Vertical">
            <TextBox x:Name="BlankName1" Text="----" FontSize="35" />
            <TextBox x:Name="BlankName2" Text="123" FontSize="35" />
            <Button x:Name="Back" Content="뒤로가기" Click="Back_Click"/>
        </StackPanel>

BlankPage.xaml.cs

public BlankPage()
        {
            this.InitializeComponent();
        }    

        private void Back_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(MainPage));
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var student = (Student)e.Parameter;

            if(!string.IsNullOrWhiteSpace(student.MainName1))
            {
                BlankName1.Text = student.MainName1;
                BlankName2.Text = student.MainName2;
            }
         }

 

Student.cs

 public class Student
    {
        public string MainName1 { get; set; }
        public string MainName2 { get; set; }
    }

 

3. 압축파일

파일이 필요하신 분은 댓글 주세요.

navigate.zip
2.54MB

728x90
728x90

1. 구성

각 Button에는 "안녕하세요."와 "오늘 날씨는 맑음이네요."가 등록이 되어 있습니다.

해당 Button을 누른다면, 해당하는 글자가 TextBox에 작성 될 것입니다.

처음 이용하시는 분들을 위하여 PlaceholderText를 통하여 Hint를 주었습니다.

 

2. 코더

        <StackPanel >
            <StackPanel.Resources>
                <Style TargetType="Button">
                    <Setter Property="Width" Value="200"/>
                    <Setter Property="Margin" Value="0,10,0,0"/>
                </Style>
            </StackPanel.Resources>
            <StackPanel Orientation="Vertical" Padding="150">
                <TextBox x:Name="name" PlaceholderText="해당 Button을 누르면 버튼에 적힌 글자가 TextBox에 작성 됩니다." />
                <Button x:Name="btnname1" Content="안녕하세요." Click="Btnname1_Click"/>
                <Button x:Name="btnname2" Content="오늘 날씨는 맑음이네요." Click="Btnname2_Click"/>
            </StackPanel>
        </StackPanel>
	private void Btnname1_Click(object sender, RoutedEventArgs e)
        {
            name.Text = "안녕하세요.";
        }

        private void Btnname2_Click(object sender, RoutedEventArgs e)
        {
            name.Text = "오늘 날씨는 맑음이네요.";
        }

 

3. 결과

 

728x90
728x90

1.안내

예전에 초보자들도 쉽게 만들수 있는 계산기

초보자 누구나 할 수 있는 간단하지만 알찬 계산기!!

코더만 보시더라도 알만한 내용이니 처음 UWP나 WPF 시작하시는 분이 보면 좋을 거 같습니다.

설명은 주석을 참고하시면 되며, Windows Forms에서 사용하기는 약간 다른부분이 있으니, 그점만 참고하시면 될 거 같습니다.

자 그럼 지금부터 진행하겠습니다.

 

2. 코더

MainPage.xaml

         <StackPanel Orientation="Vertical" Margin="77">
            <StackPanel Orientation="Vertical" HorizontalAlignment="Center" >
                <StackPanel Orientation="Horizontal" Width="400" Height="50" >
                    <TextBlock Text="입력 :" FontSize="30" />
                    <TextBlock x:Name="Input_Box" FontSize="30" Width="330"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" Width="400" Height="50">
                    <StackPanel Orientation="Horizontal" Width="400" Height="50">
                        <TextBlock Text="결과 :" FontSize="30"/>
                        <TextBlock x:Name="Result_Box" FontSize="30" Width="330"/>
                    </StackPanel>
                </StackPanel>
            </StackPanel>
            <StackPanel Orientation="Vertical" Margin="15">
                <StackPanel Orientation="Horizontal" Width="280">
                    <Button x:Name="btn1" Content="1" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn1_Click"/>
                    <Button x:Name="btn2" Content="2" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn2_Click"/>
                    <Button x:Name="btn3" Content="3" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn3_Click"/>
                    <Button x:Name="btn4" Content="4" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn4_Click"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" Width="280">
                    <Button x:Name="btn5" Content="5" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn5_Click"/>
                    <Button x:Name="btn6" Content="6" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn6_Click"/>
                    <Button x:Name="btn7" Content="7" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn7_Click"/>
                    <Button x:Name="btn8" Content="8" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn8_Click"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" Width="280">
                    <Button x:Name="btn9" Content="9" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn9_Click"/>
                    <Button x:Name="btn0" Content="0" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn0_Click"/>
                    <Button x:Name="btn_plue" Content="+" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn_plue_Click"/>
                    <Button x:Name="btn_minus" Content="-" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn_minus_Click"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" Width="280">
                    <Button x:Name="btn_Reset" Content="Reset" FontSize="30" Width="120" Height="50" Margin="10" Click="Btn_Reset_Click"/>
                    <Button x:Name="btn_multiply" Content="*" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn_multiply_Click"/>
                    <Button x:Name="btn_division" Content="/" FontSize="30" Width="50" Height="50" Margin="10" Click="Btn_division_Click"/>
                </StackPanel>
            </StackPanel>
        </StackPanel>

 

MainPage.xaml.cs

public int Result = 0; //현재 최종 결과 0
public bool isNum = true; //더하기 버튼 클릭하면 새로운 숫자를 입력 받는다.

private void Btn_Reset_Click(object sender, RoutedEventArgs e)
        {
            Result = 0;
            isNum = true;
            Input_Box.Text = "0";
            Result_Box.Text = "0";
        }

        private void Btn_multiply_Click(object sender, RoutedEventArgs e)
        {
            int num = int.Parse(Input_Box.Text); //string 타입을 int형으로 변경 Parse
            Result = Result * num;

            Result_Box.Text = Result.ToString();
            isNum = true;
        }

        private void Btn_division_Click(object sender, RoutedEventArgs e)
        {
            int num = int.Parse(Input_Box.Text);
            Result = Result / num;

            Result_Box.Text = Result.ToString();
            isNum = true;
        }

        private void Btn_minus_Click(object sender, RoutedEventArgs e)
        {
            int num = int.Parse(Input_Box.Text);
            Result = Result - num;

            Result_Box.Text = Result.ToString();
            isNum = true;
        }

        private void Btn_plue_Click(object sender, RoutedEventArgs e)
        {
            int num = int.Parse(Input_Box.Text);
            Result = Result + num;

            Result_Box.Text = Result.ToString();
            isNum = true;
        }

        private void Btn0_Click(object sender, RoutedEventArgs e)
        {
            if(isNum) //isNum :: 새로운 넘버인가?
            {
                Input_Box.Text = ""; //새로운 넘버라면 Input_Box 원래 있던거에 공백이 들어간다.
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "0"; // + "0"을 주어 버튼 0을 두번재 눌러도 0이 나온다.
        }

        private void Btn9_Click(object sender, RoutedEventArgs e)
        {
            if (isNum) 
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "9";
        }

        private void Btn8_Click(object sender, RoutedEventArgs e)
        {
            if (isNum) 
            {
                Input_Box.Text = ""; 
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "8";
        }

        private void Btn7_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
            }

            Input_Box.Text = Input_Box.Text + "7";
        }

        private void Btn6_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "6";
        }

        private void Btn5_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "5";
        }

        private void Btn4_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "4";
        }

        private void Btn3_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "3";
        }

        private void Btn2_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "2";
        }

        private void Btn1_Click(object sender, RoutedEventArgs e)
        {
            if (isNum)
            {
                Input_Box.Text = "";
                isNum = false;
            }

            Input_Box.Text = Input_Box.Text + "1";
        }
    }

 

3. 결과

728x90
728x90

데이터 바인딩의 이해를 위해 간단하게 https://clear-sky-sun.tistory.com/3에서 설명을 확인 할 수 있습니다.

 

1. 구성

단방향 바인딩과, 양방향 바인딩에 대해 실습을 해보려고 합니다.

간단한 실습을 통해, 코더를 하나씩 작성하여, 이해 하시기 바랍니다.

 

2. 단반향 바인딩 진행

One_Way_Data_Binding.xaml

	<Grid>
        <StackPanel Name = "Display">
            <StackPanel Orientation = "Horizontal" Margin = "50, 50, 0, 0">
                <TextBlock Text = "Name : " Margin = "10" Width = "100"/>
                <TextBlock Margin = "10" Width = "100" Text = "{Binding Name}"/>
            </StackPanel>

            <StackPanel Orientation = "Horizontal" Margin = "50,0,50,0">
                <TextBlock Text = "Age : " Margin = "10" Width = "100"/>
                <TextBlock Margin = "10" Width = "200" Text = "{Binding Age}" />
            </StackPanel>
        </StackPanel>
    </Grid>

One_Way_Data_Binding.xaml.cs

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            DataContext = Et.GetEt();
        }
    }

    public class Et
    {
        public string Name { get; set; }
        public string Age { get; set; }

        public static Et GetEt()
        {
            var emp = new Et()
            {
                Name = "Gelato",
                Age = "20's"
            };
            return emp;
        }
    }

 

결과

 

3. 양방향 바인딩 진행

Tow_Way_Data_Binding.xaml

        <Grid.RowDefinitions>
            <RowDefinition Height = "Auto" />
            <RowDefinition Height = "Auto" />
            <RowDefinition Height = "*" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width = "Auto" />
            <ColumnDefinition Width = "200" />
        </Grid.ColumnDefinitions>

        <TextBlock Name = "nameLabel" Margin = "200,20,0,0">Name:</TextBlock>

        <TextBox Name = "nameText" Grid.Column = "1" Margin = "10,20,0,0" 
         Text = "{Binding Name, Mode = TwoWay}"/>

        <TextBlock Name = "ageLabel" Margin = "200,20,0,0" 
         Grid.Row = "1">Age:</TextBlock>

        <TextBox Name = "ageText" Grid.Column = "1" Grid.Row = "1" Margin = "10,20,0,0" 
         Text = "{Binding Age, Mode = TwoWay}"/>

        <StackPanel Grid.Row = "2" Grid.ColumnSpan = "2">
            <Button Content = "Display" Click = "Button_Click"  
            Margin = "200,20,0,0"/>
            <TextBlock x:Name = "txtblock" Margin = "200,20,0,0"/>
        </StackPanel>

Tow_Way_Data_Binding.xaml.cs

using Windows.UI.Xaml.Controls;


public sealed partial class MainPage : Page
    {
        Person person = new Person { Name = "철수", Age = 27 };

        public MainPage()
        {
            this.InitializeComponent();
            this.DataContext = person;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string message = person.Name + " is " + person.Age + " years old";
            txtblock.Text = message;
        }
    }
    public class Person
    {
        private string nameValue;

        public string Name
        {
            get { return nameValue; }
            set { nameValue = value; }
        }

        private double ageValue;

        public double Age
        {
            get { return ageValue; }

            set
            {
                if (value != ageValue)
                {
                    ageValue = value;
                }
            }
        }
    }

 

결과

728x90
728x90

Model View Controller (MVC)?

model이란?

어떠한 동작을 수행하는 코드를 말한다. 표시 형식에 의존하지 않는다.

사용자에게 어떻게 보일지 신경을 안써도 된다. public 함수로 이루어진다.

view이란?

모델로부터 값을 가져와 사용자에게 보여준다.

controller이란?

사용자는 컨트롤러를 사용하여 모델의 상태를 바꾼다.

컨트롤러는 모델의 mutator 함수를 호출하여 상태를 바꾼다.

모델의 상태가 바뀌면 모델은 등록된 뷰에 자신의 상태가 바뀌었다는 것을 알리고 뷰는 거기에 맞게 사용자에게 모델의 상태를 보여준다.

 

Binding 구조?

- UI 요소를 의미하는 바인딩 대상

- 데이터를 의미하는 바인딩 소스

- 둘 사이를 관계를 맺어누는 바인딩 개체

Binding 방식?

OneWay방식

- 바인딩 소스를 바인딩 대상에 바인딩 하였다면, 바인딩 대상의 값이 변경되면 바인딩 소스 값도 변경 된다.

하지만, 바인딩 소스 값이 변경 되었다면 바인딩 대상의 값은 변경되지 않는다.

TwoWay방식

- 바인딩 소스와 바인딩 대상 양방향 모두 데이터 바인딩 한다.

즉. 바인딩 소스 값이 변경되어도 바인딩 대상 값이 변경되며, 바인딩 대상 값이 변경되어도 바인딩 소스 값이 변경된다.

OneWayToSoruce 방식

- OneWay방식 반대. 즉, 바인딩 소스와 바인딩 대상의 방향이 반대.

OneTime방식

- 최초 바인딩 소스 값이 바인딩 대상 속성 값을 초기화 하지만 그 이후에는 어떤 변환도 바인딩 대상,

  바인딩 소스 모두에 반영되지 않는 방식

 

데이터 바인딩을 이해하게 되었다면, 아래의 페이지로 넘어가서 실습을 진행해 보세요.

https://clear-sky-sun.tistory.com/4

728x90

+ Recent posts