여러분 오늘도 안녕하세요!

야근에 녹아가는 개발자 은다민 입니다..

 

지난 시간에 배운 파이썬의 기초는 어떠셨나요?

가능하면 초보 개발자나 이제 입문하는 개발자들을 위한 공간이 되고싶은데

생각보다 풀어 쓰기가 쉽지가 않네요 ㅠ_ㅠ

그래도 열심히 해볼테니 여러분도 같이 힘내봅시당 :)

 


변수(Variable)

아니! 기초라더니..! 아직 2장밖에 안됐는데 뭐 이리 어려운 단어가 튀어나왔나요?

라고 생각하신분들 혹시 계신가요?

 

저는 처음 프로그래밍을 공부할때 가장 어려웠던 부분이 용어 파악이었어요.

사람마다 받아들이는게 다르고 공부스타일이 다르지만

저같은 경우 용어가 어렵다보니 이해하기 보다는 단어 자체를 외워버리는 노력을 했는데

생각보다 저에게 잘 맞는 방법이더라구요 ㅎ,ㅎ

그래서 이 변수란 무엇일까요?

 

변수(variable)는 어떠한 데이터를 담아둘 수 있는 그릇이라고 생각하시면 됩니다.

잘 감이 안오시나요? 예를들어 봅시다.

여러분들이 제 블로그를 방문할때마다 저는 "안녕하세요" 라는 문장을 보여주고싶어요.

그런데 여러분들이 방문할때마다 계속해서 "안녕하세요" 라는 문장을 '생성' 한다면

같은일을 굉장히 여러번 반복하는 불필요한 행동이 되겠죠?

그럴때 "안녕하세요" 라는 단어를 그릇에 보관해 두었다가, 여러분들이 올때마다

그저 제 그릇을 보여주기만 한다면 너무나 편리하겠죠 :)

그렇다면 이 변수를 어떻게 선언할까요?

 

변수 선언하기

제가 파이썬을 배우면서 가장 헷갈렸던 부분이에요.

Java와 C#을 공부했을땐 분명 변수 선언시 '자료형' 이라는것을 선언해 주었거든요.

자료형이 뭐나구요? 여러분은 지금 당장 알필요가 없어요!

Python은 무려 '자료형'을 사용하지 않고 변수 선언이 가능하거든요 :)

다만 자료형을 사용하지 않아도 될 뿐 Python에서도 자료형은 존재하며 중요하답니다!

자 이제 변수를 선언해 봅시다!

 

a = 1

어....? 끝...?

네, 끝입니다! 굉장히 쉽죠? 그럼 이 코드를 어떻게 해석하면 될까요?

a 는 1과 같다? 땡땡땡 이걸 조심하셔야해요!!

 

이 코드를 읽기 위하여 이번 포스팅의 마지막 주제인 대입 연산자에 대해 알아봅시다 :)

 

대입 연산자

아까 위에서 변수에 대해 설명한것 기억하시나요?

변수는 데이터(값)을 담아주는 혹은 저장해주는 그릇이라고 생각하시면 된다고 했었네요.

 

즉 대입연산자(=)는 변수 a에 1이라는 데이터를 '저장'해준다는 의미를 갖고있어요.

 

그렇다면 a 는 1과 같다 라는건 코드로 어떻게 표현할까요?

두 값을 같다 라고 표현해 줄때는 등호(==)를 사용해주시면 됩니다!

# 1이라는 데이터를 담고있는 변수 a
a = 1

# a는 1과 같다
a == 1

위 두 코드의 차이점을 확실히 인지하고 이해가 어렵다면 외워주세요!

굉장히 중요하며 앞으로 끊임없이 쓰이니 기초체력으로 가져가셔야 합니다.

 


변수에 대해 이해가 되셨나요?

다음시간에는 변수에 저장될 자료형인 숫자형문자열에 대해 공부해 볼게요 :)

혹시 어려운 부분이 있다면 댓글로 언제든 질문해주셔도 됩니다!

 

오늘도 행복한 코딩하세요 :)

728x90

'개발 > Python' 카테고리의 다른 글

[Python]1. Python(파이썬) 시작하기  (0) 2021.06.24
[Python] 1. 기초_기본자료형과 리스트(List)  (2) 2021.06.22

안녕하세요! 노력하는 개발자 은다민입니다 :)
얼마전 JAVA와 C#에 이어 Python을 공부하게되었는데
그때 올린 포스팅이 초보자에게는 조금 어려울수도 있다고 판단하여
기초부터 다시 포스팅 해보려고 합니다!

초보 개발자나 Python을 처음 접해보시는 분이라면
저와 함께 열심히 공부했으면 좋겠네요 :D

우선 Python이 어떤 언어인지 알아야겠죠?

Python이란?

Python은 1980년도에 귀도 반 로썸에 의해 만들어진 고급 프로그램 언어입니다.
많은 분들이 오해하고 있는 부분중 하나인데, 고급언어라고 하여 무조건 좋은건 아니에요!
고급언어는 컴퓨터가 알아듣기 쉬운언어가 아닌 '사람'이 중심인 언어라고 생각하시면 될 것 같네요 :)
학습이 편하고 빠른 개발속도와 다양한 확장성을 장점으로 갖고있기 때문에 현재 많은 사랑을 받고 있는 언어입니다!

Python의 특징

Python이 어떤 언어인지 알았으니, 이제 특징을 알아보도록 합시다.
위에 서술되어 있듯 고급언어(사람이 이해하기 쉬움)이기 때문에 타 언어에 비하여 학습속도가 굉장히 빠른편이에요!

타 언어에 비해 Python이 얼마나 쉬운지 아래의 예시를 한번 볼까요?

변수선언

//JAVA의 변수 선언 String a = "안녕"; Char b = 'A'; Int c = 1; double d = 2.3;
#Python의 변수 선언 a = "안녕" b = 'A' c = 1 d = 2.3

어떤가요? (힘의) 차이가 느껴지시나요?
다른 포스팅에서 다룰 주제지만, 변수 선언시 자료형을 지정해줄 수 없습니다.
앗! 프로그래밍이 처음이라 변수와 자료형을 모르겠다구요?
곧 다른 포스팅으로 알려드릴테니 지금은 '아 이런게 있구나!' 정도로 넘기셔도 괜찮아요 :)

Java의 경우 String이라는 자료형을 가진 a라는 변수에 "안녕"이라는 문자열을 담아주었어요.
Python의 경우 자료형없이 그저 a = "안녕" 으로 코드가 끝났습니다!
변수 a에 "안녕" 이라는 문자열을 담는것에 성공하였네요 :)
이렇게만 봐도 굉장히 간단한게 느껴지죠?

들여쓰기

Java나 C#의 경우 세미콜론 ( ; ) 으로 코드의 마침을 구분합니다. 이 작은 세미콜론 하나 때문에
코드가 엉망이 되는경우도 굉장히 많아요 !
하지만 위에 예제 코드를 보면 Python의 경우 세미콜론을 사용하지 않습니다.
들여쓰기를 통하여 블록(Block)을 구분해요.

예를들어볼까요? 제 주력 언어인 C#에서의 for문과 현재 공부중인 Python의 for문 이에요!
전혀 이해 못하셔도 되니 지금은 그저 생김새만 보셔도 괜찮습니다!

//C#의 for문 for (int i = 0; i < 10; i++) { Console.WriteLine(i); }
#Python의 for 문 for i in range(10): print(i)

어떻게, 좀 비교가 되시나요?
Python은 위의 코드 print(i)처럼 들여쓰기를 통하여 블록을 구분함으로써 서로의 코드를 침범하지 않습니다 :)
그리고 for문 역시 훨씬 간결한것을 확인 할 수 있어요 !


파이썬에 대해 조금은 알게되셨나요?
원래는 Python의 설치와 IDE(개발툴) 설치도 함께 포스팅 하려고 했는데
워낙 장단점이 명확하고 취향을 많이타기때문에
저는 그 부분에 대해서는 다루지 않습니다!

궁금하시는분들을 위하여 제 개발툴은
Java : Eclipse
C# : Visual Studio2019
Python : Visual Studio Code

이렇게 사용하고있어용 :)
내일 또 회사로 출근해야하니 오늘은 이만 줄입니다!

다음 포스팅까지 다들 잘 지내주세요~!

728x90

'개발 > Python' 카테고리의 다른 글

[Python]2. 변수(variable)  (2) 2021.06.24
[Python] 1. 기초_기본자료형과 리스트(List)  (2) 2021.06.22

안녕하세요!

Java와 C#에 이어 최근 Python을 시작했어요 :)!

 

요즘 회사 일이 바빠서 포스팅을 한달이나 못했지 뭐에요

혹시나 Python을 입문하시는 분이 계신다면 저랑 같이 열심히 공부했으면 좋겠네요 :)!

 

python 설치는 다른 포스팅에 게시해놓을게요!

 


기본 자료형

1. 리터럴 상수

1) 숫자형 :

  1. 정수형(Integer) : 1, 2, 3, 4, 5, 100
  2. 부동소수점형(Float) : 3.23, 52.3E_4

2) 문자형 :

  1.  작은따옴표( ' ' ), 큰따옴표( " " ), 따옴표 세개 ( '''  ''' )
  2.  문자열은 따옴표로 감싸서 표현합니다
x = '이것은 X 입니다.'
y = "이것은 Y 입니다."
z = '''이것은 Z 입니다
Z의 첫번째 라인 입니다
Z의 두번째 라인 입니다
'''

print(x)
print(y)
print(z)

위 코드를 입력했을때의 결과 값

 

2. 리스트 (List)

1) 리스트(List) : 리스트명 = [값1, 값2, 값3, ...]

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [1, 2, 'a', 'b']
list4 = [1, 2, ['a', 'b']]

print(list1)
print(list2)
print(list3)
print(list4)

위 코드를 입력했을때의 결과 값

2) 특징 : 순서화된 요소 / 추가,변경,삭제 가능

 

3) 함수

 

1.  리스트 요소의 개수 구하기 ( len(parameter) ) : len은 Length를 줄인것

list = [1, 2, 'a', 'b']
print(len(list))

 

결과값

2.  Insert (삽입) : 정해진 위치에 삽입

list = [1, 2, 4, 5]
list.insert(2,3) # 2번째 위치에 3을 추가

print(list)

결과값

3. append (추가) : 맨뒤에 추가

list = [1, 2, 3, 4]
list.append(5)
print(list)

결과값

4. sort (정렬) : 순서대로 정렬

list = [1, 3, 5, 2, 4]
list.sort()
print(list)

결과값

5. reverse sort (역정렬) : 역으로 정렬

#첫번째 방법
list = [1, 4, 5, 3, 2]
list.sort(reverse=True)
print(list)


#두번째 방법
list = [1, 4, 5, 3, 2]
reverseList = sorted(list, reverse=True)
print(reverseList)

결과값


 

역시 java랑 C#과 다른 언어라 그런지 조금 생소한 면이 있지만

그래도 비슷해서 뭔가 재미있네요 :)

 

다들 도움이 좀 되셨나요?

 

오늘은 여기까지 하겠습니다!

 

다들 열심히 코딩해용!

728x90

'개발 > Python' 카테고리의 다른 글

[Python]2. 변수(variable)  (2) 2021.06.24
[Python]1. Python(파이썬) 시작하기  (0) 2021.06.24

StaticResource와 DynamicResource에 대한 이야기를 시작하기 전에

우선적으로 Resource가 무엇인지 궁금한 사람들이 많을 거라고 생각합니다.

 

- Resource

WPF에서 리소스(Resource)란 보통 한 번 이상 혹은 자주 사용하기를 원하는 자원을 말합니다.

리소스는 필요할 때 재사용할 수 있도록 임시로 어딘가에 저장됩니다.

(CPU의 캐시 된 메모리와 비슷하다고 생각하시면 됩니다!)

 

모든 객체는 리소스로 정의될 수 있으며, 고유 키는 XAML 리소스에 지정됩니다.

우리는 해당 키를 이용해 StaticResource 혹은 DynamicResource 태그를 사용하여 참조할 수 있습니다. 

 

- 왜 리소스를 사용할까?

1. 재사용성, 공통 파일에서 단 한 번만 정의하고 여러 XAML에서 사용할 수 있다.

2. 사용범위가 전역, 즉 전체 응용프로그램인 경우 데이터를 로컬로 저장.

3. 그리도, 스택 패널등 같은 패널 내에서 정의 가능.

 

이러한 장점들이 존재합니다!

리소스의 활용을 극대화 하기위하여

WPF에는 두 가지 유형의 리소스가 있습니다.

- StaticResource와 DynamicResource

개발자라면 Static과 Dynamic이라는 단어를 굉장히 많이 접해보았겠죠?

정적(Static) 동적(Dynamic)의 의미를 갖고 있습니다.

위에 앞서 설명했듯이 리소스는 정적 또는 동적으로 참조될 수 있습니다.

 

StaticResource와 DynamicResource의 가장 큰 차이는 참조 요소에 의해 리소스가 검색되는 방식에 있습니다.

 

StaticResource(정적 리소스)는 참조 요소에 의해 한번만 검색되며 리소스의 전체 수명에 사용됩니다.

즉, 페이지를 새로 로드하는 것과 같은 런타임 동작을 기반으로 다시 검색되지 않습니다.

반복해서 검색되지 않기 때문에 성능적인 우위가 있겠죠?

 

DynamicResource(동적 리소스)는 런타임 시 변경될 여지가 있는 리소스에 사용됩니다.

리소스가 참조될 때마다 리소스를 다시 읽어오기 때문에 StaticResource에 비하여 성능 저하가 발생할 수 있습니다.

 

우선 StaticResource와 DynamicResource의 사용 예시를 확인해봅시다.


- StaticResource

<Button Style="{StaticResource ResourceKey}"></Button>

- DynamicResource

<Button Style="{DynamicResource ResourceKey}"></Button>

 

이렇게만 봐서는 잘 모르겠죠?

 

실제로 버튼을 만들어서 어떤 차이가 있는지 알아봅시다 :)

 

Static / Dynamic으로 나누어 2개의 버튼을 만들어줄 거예요.

 

 

- 예제


[MainWindow.xaml]

 <Button Grid.Row="1" Grid.Column="1" Content="Static"></Button>
 <Button Grid.Row="3" Grid.Column="1" Content="Dynamic"></Button>

-버튼 생성

전체 코드를 보고 싶으신 분은 더보기를 눌러주세용 :D

더보기

전체 코드

<Window x:Class="StaticAndDynamicResource.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:StaticAndDynamicResource"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="10"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="10"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="10"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Button Grid.Row="1" Grid.Column="1" Content="Static"></Button>
        <Button Grid.Row="3" Grid.Column="1" Content="Dynamic"></Button>
    </Grid>
</Window>

 

 

예를 쉽게 들기 위하여 App.xaml을 사용합니다.

App.xaml을 쉽게 설명하면 해당 xaml에서 지정해준 스타일은 전역에 세팅이 된답니다!

아직 저도 이쪽에 대한 이해가 낮은 편이라 완벽하게 숙지가 된다면 추가로 포스팅할게요 :)

 

[App.xaml]

<Application.Resources>
        <Style TargetType="Button">
            <Setter Property="Background" Value="Black"/>
            <Setter Property="Foreground" Value="white"/>
        </Style>
</Application.Resources>

위 코드와 같이 스타일 설정을 해준다면

 

-App.xaml에서 스타일 지정

어라?

우리는 분명 MainWindow.xaml에서 따로 스타일을 지정해준 적이 없는데 배경과 글자색이 변경되었네요!

그 원리는 TargetType에 있습니다!

 

[App.xaml]

<Style TargetType="Button">

해당 부분의 TargetType을 Button으로 설정해주었기 때문에

앞으로 생성해주는 모든 버튼은 저희가 설정해준 스타일을 적용하여 생성됩니다!

 

이쯤에서 이런 의문이 들겠죠?

흠.. 이런 스타일의 버튼을 많이 사용하긴 할 건데.. 전부 이런 스타일은 싫어요!

 

그렇다면 App.xaml에서 2가지의 스타일을 지정하고 MainWindow.xaml에서 각각의 스타일을 입혀주면 어떨까요?

 

[App.xaml]

<Style TargetType="Button" x:Key="StaticStyle">
	<Setter Property="Background" Value="Black"/>
	<Setter Property="Foreground" Value="White"/>
</Style>
<Style TargetType="Button" x:Key="DynamicStyle">
	<Setter Property="Background" Value="Blue"/>
	<Setter Property="Foreground" Value="White"/>
</Style>

[MainWindow.xaml]

<Button Grid.Row="1" Grid.Column="1" Content="StaticResource Button" Style="{StaticResource StaticStyle}"/>
<Button Grid.Row="3" Grid.Column="1" Content="DynamicResource Button" Style="{DynamicResource DynamicStyle}"/>

첫 번째 버튼에는 Style="{StaticResource StaticStyle}"

두 번째 버튼에는 Style="{DynamicResource DynamicStyle}"

을 지정해주고 App.xaml에서 2가지의 스타일과 각 버튼의 스타일에 적용된 이름을 x:key로 지정해주었어요

결과는 어떨까요?

 

 

두 가지의 스타일이 잘 적용되었죠?

언뜻 보면 맞는 것 같지만 엄밀히 말하면 잘못된 사용법이라고 볼 수 있어요.

 

이런 식으로 사용할 거면 App.xaml에 굳이 스타일을 지정해두고 사용하는 의미가 없겠죠!

잘 이해가 안 가시나요?

StaticResource와 DynamicResource의 사용방법은 무궁무진 하지만 제가 자주 사용하는 방법을 알려드릴게요! 

 

 

드디어 이제 우리가 앞서 배운 Static과 Dynamic의 활용법을 배울 때네요!

StaticResource부터 볼까요?

StaticResource는 앞서 말했듯이 정적인 리소스예요!

 

[MainWindow.xaml]

 <Button Grid.Row="1" Grid.Column="1" Content="Static"></Button>
 <Button Grid.Row="3" Grid.Column="1" Content="Dynamic"></Button>

다시 처음으로 돌아와 기본 버튼만 생성해 놓았습니다.

여러분이 잘 아는 가장 기본 형태 (회색 바탕에 검정 폰트)의 버튼이 생성되었겠죠?

 

이제 App.xaml에서 StaticResource Style을 설정해봅시다.

 

[App.xaml]

 

<Style TargetType="{x:Type Control}" x:Key="StaticStyle">
	<Setter Property="Background" Value="Black"/>
	<Setter Property="Foreground" Value="White"/>
</Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource StaticStyle}"></Style>

무언가 많이 변한 게 보이시나요?

우선 첫 번째 스타일을 봅시다!

<Style TargetType="{x:Type Control}" x:key="StaticStyle"> 이 부분을 잘 보셔야 해요.

스타일의 타깃 타입을 Control로 설정한 이유는 바로 여기에 있습니다.

 

Control Class
Control Class에 속해있는 Foreground 와 Background

 

우리는 Button의 Background와 Foreground를 변경하려 했죠?

Control클래스가 Background와 Foreground의 부모이기 때문에 TargetType에 Control을 설정해주면

Control클래스의 자식들을 얼마든지 가져다 쓸 수 있다는 장점이 있어요 :)

이 부분에 대해서 이해가 어려우시면 댓글 남겨주세요!

 

두 번째로 봐야 할 것은 x:key="StaticStyle"

StaticStyle은 제가 임의로 설정해준 이름입니다! 여러분이 사용할 이름을 편하게 적어주시면 될 것 같아요

이 key값은 위 코드 중 마지막 스타일에서 재사용됩니다!

 

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource StaticStyle}"></Style>

 

해당 코드를 보시면 TargetType에는 우리가 실제로 사용할 타입 --> Button이 입력되었고

BasedOn 즉 모든 버튼의 기본 스타일을 {StaticResource StaticStyle}로 설정한다는 의미예요

여기서 StaticStyle이라는 이름은 여러분이 지정해준 key값입니다!

이해가 가시나요?

 

결과부 터봅시다!

 

 

StaticResource로 모든 버튼을 통일시킴

 

짜잔! 모든 버튼의 Base가 우리가 설정해준 검정 배경에 하얀 글씨로 바뀌었네요!!

우리는 모든 버튼에 StaticResource를 사용하였기 때문에 이 버튼은 런타임과 동시에 메모리가 할당이 되고

프로그램이 종료될 때까지 수명이 다하지 않아요!

즉 변경이 되지 않고 언제나 해당 상태를 유지해야 할 때 StaticResource를 사용하시면 됩니다!

 

어..? 그런데 우리는 DynamicResource로 버튼을 따로 컨트롤해주고 싶어요!

 

이럴 때 제가 사용하는 방법은 리소스 사전을 이용하는 거예요!

 

프로젝트에서 리소스 사전을 추가해주자

 

Dictionary1.xaml을 생성해주고 이곳에 원하는 스타일을 추가해봅시다.

 

[Dictionary1.xaml]

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:ResourcePractice">

    <Style TargetType="{x:Type Button}" x:Key="DynamicStyle">
        <Setter Property="Background" Value="Blue"/>
        <Setter Property="Foreground" Value="White"/>
    </Style>
</ResourceDictionary>

StaticResource와 형태가 굉장히 흡사하죠?

 

그렇다면 이 스타일은 어떻게 적용할까요?

 

App.xaml로 돌아와 위에 적용해준 Dictionary1.xaml을 참조받아옵시다.

 

[App.xaml]

 

<ResourceDictionary.MergedDictionaries>
	<ResourceDictionary Source="Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>

어때요 감이 잡히시나요?

App.xaml에서 Dictionary1.xaml을 참조받아왔어요!

이제 어느 MainWindow.xaml에서도 App.xaml을 통해 Dictionary1.xaml에 있는 스타일을 가져올 수 있겠죠?

 

MainWindow.xaml에서 스타일을 마무리 지어봅시다.

 

[MainWindow.xaml]

<Button Grid.Row="3" Grid.Column="1" Content="DynamicResource Button" Style="{DynamicResource DynamicStyle}"/>

 

스타일이 잘 적용된것을 볼 수 있다!

 

어때요? 감이 오시나요?

 

조금 난해하기도 하고 굳이 이렇게 사용해야 하나?라는 의문이 드시는 분도 많을 거라 생각해요.

사용 방법은 무궁무진하지만 굳이 이렇게 사용한 이유는 가장 간결하게 코드 구성을 하기 위해서예요.

 

StaticResource는 전역에 원하는 Base Style을 쫙 뿌려주고

그중 고치고 싶은 부분만 DynamicResource로 컨트롤해주는 방식이랍니다 :)

 

첫 게시글이라 아직 많이 난해하고 저도 정리가 조금 어렵지만

부디 이 글을 보시고 WPF에 대하여 재미를 느끼셨으면 좋겠어요!

 

아직 저도 초보 개발자인지라 많이 부족하니

언제든지 태클과 훈수 환영합니다!

 

모르는 부분이 있다면 댓글 남겨주세요!

 

앞으로도 힘내서 포스팅할게요:D

 

다들 좋은 하루 보내세요!


 

 

 

 

 

728x90

+ Recent posts