닷넷 프레임워크(.NET Framework, 이전 이름: 닷넷) 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경이다. 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하였고, 공통 언어 런타임(Common Language Runtime)(CLR)이라는 이름의 가상 머신 위에서 작동한다.

 

쉽게 말하면 프로그램이 돌아가도록 지원해주는 뼈대 역할을 해 주는 것 이라고 보면 됩니다. 소프트웨어 프레임워크는 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조입니다. 뼈대, 골조, 프레임워크 라고 한다.

 

닷넷프레임워크는 빌드, 배포, 웹서비스, 웹어플리케이션 등이 동작하게 하는 공통 환경입니다. 그리고 BCL(Base Class Library)를 포함하고 있는데, 이 클래스 라이브러리는 파일을 제어 하거나 데이터베이스에 접근하거나 네트워크를 제어 할수 있는 기능이 포함되어 있습니다.

, 윈폼, 데이터, XML 등 다양한 라이브러리들이 존재 합니다. 이러한 기능들이 닷넷 프레임워크에 새롭게 나타난게 아니라 기존 Win32 API 들을 닷넷에 맞게 재구성 했다고 보시면 됩니다. 닷넷 이전에도 DB 관련 프로그램을 VBC++ 로 만들었죠. C++MFC도 어떻게 보면 BCL이라고도 할수 있겠네요.

 

대부분의 기능들이 이미 클래스로 만들어져 있어서 개발자는 해당 클래스 라이브러리를 사용하면 되는것입니다. 간편하죠? 하지만 좀 다른 UI나 기능을 구현하려면 직접 구현을 해야 하는데 보통 3rd Party 제품을 많이 사용하죠. 실제로 개발자가 자료구조와 알고리즘을 직접 만들어서 개발하는 경우는 드뭅니다. JAVA도 마찬가지 입니다. 대부분 클래스를 가져다 쓰지요, 하지만 닷넷 프레임워크보다 추상클래스가 많아서 직접 구현해야 하는 경우가 많습니다.

 

닷넷 프레임워크의 구조

.NET 프레임워크의 가장 중요한 콤포넌트는 공통 언어 기반(Common Language Infrastructure)이다. 다른 말로 CLI라고 한다. CLI를 둔 목적은 애플리케이션의 개발과 실행 시 언어에 종속적이지 않은 플랫폼을 제공하기 위해서이다. 예외 처리, 가비지 콜렉션, 보안, 호환 등을 위한 소프트웨어 콤포넌트를 포함한다. 마이크로소프트가 구현한 CLI를 일컬어, 공통 언어 런타임(Common Language Runtime, CLR)이라고 한다.



어셈블리

중간 언어인 MSIL 코드는 닷넷 어셈블리에 저장된다. 닷넷 어셈블리는 윈도우 구현에서는 포터블 익스큐터블(PE) 파일이 된다. (EXE 혹은 DLL파일이다.) 닷넷 어셈블리는 소프트웨어 배포 및 판 높임, 보안 등에 있어서 .NET 유니트 역할을 한다. 어셈블리는 파일 한 개 이상 여러 개의 파일로 구성되는데, 파일들 중 한 개 파일은 매니페스트를 꼭 포함해야 한다. 어셈블리의 완전한 이름은 간단한 텍스트 이름 및 판(버전) 번호, 컬처, 공개 키 암호 방식(public key) 토큰 등을 가지고 있다; 이 중 이름은 꼭 가지고 있어야 하지만, 나머지는 없어도 된다. 공개 열쇠 암호 토큰은 어셈블리가 작성될 때 생성된다. 이 토큰은 어셈블리의 이름과 어셈블리 파일들의 내용을 대표하는 고유의 값이다. 비밀 열쇠 암호는 어셈블리의 작성자에게만 알려진다. 같은 공개 열쇠 암호 토큰을 갖고 있는 두 개의 어셈블리는 같은 어셈블리라는 사실이 보장된다. 어셈블리가 해커 등에 의해 함부로 변경되면, 공개 열쇠 암호를 이용하여 어셈블리가 변경되었는지를 감지해낼 수 있다.

 

메타데이터

모든 공통 중간 언어(CIL)는 닷넷 메타데이터를 통해 "스스로 기술""된다. CLR은 적절한 메소드가 불리는지를 보장하기 위해 메타데이터를 검사한다. 메타데이터는 보통 랭귀지 컴파일러에 의해 생성된다. 하지만 개발자 자신이 커스텀 애트리뷰트를 사용하여 자신만의 메타데이터를 작성할 수도 있다. 또한 메터데이터는 어셈블리에 대한 모든 정보를 담고 있다.

 

베이스 클래스 라이브러리 (BCL)

베이스 클래스 라이브러리(BCL).NET 프레임워크를 사용하는 모든 언어가 사용할 수 있는 클래스들의 라이브러리이다. 흔히 프레임워크 클래스 라이브러리(Framework Class Library) (FCL)이라고 잘못 불린다. (이것은 Microsoft.* 네임스페이스를 포함하는 BCL보다 큰 집합이다.) 파일 읽기나 쓰기, 그래픽 렌더링, 데이터베이스 조작, XML 조작 등과 같은 공통된 기능을 해주는 클래스들을 제공한다. BCL은 명명할 때 계층 구조를 구분하기 위해 점(.)으로 명명한다. 예를 들면 수학적 계산을 하기 위해 만들어진 이름 공간인 Math 이름 공간은 System.Math로 명명된다

 

 

 



http://dotnetpower.tistory.com/101

https://ko.wikipedia.org/wiki/%EB%8B%B7%EB%84%B7_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC

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

winform 파일 쓰기  (0) 2017.08.05
openFileDialog를 이용하여 파일읽기  (0) 2017.08.05
WinForm과 WPF  (0) 2017.07.02
윈폼(WinForm 의 구성요소, 생성코드)  (0) 2017.07.02
DLL 파일  (0) 2017.07.02

람다 형식은 인공지능 분야나 AutoCAD라는 설계 프로그램에서 쓰이는 Lisp 언어에서 물려받았다고 한다.

 

사용법

lambda(인자 : 표현식)

function으로

>>> def hap(x, y):

... return x + y

...

>>> hap(10, 20)

30

 

람다 형식으로

>>> (lambda x, y :  x + y)(10, 20)

30

map(함수, 리스트)

이 함수는 함수와 리스트를 인자로 받는다. 그리고, 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음, 그 결과를 새로운 리스트에 담아준다.

>>> list(map(lambda x: x ** 2, range(5)))

[0, 1, 4, 9, 16]

 

reduce(함수, 순서형 자료)

순서형 자료(문자열, 리스트, 튜플)의 원소들을 누적적으로 함수에 적용시킨다.

>>> from functools import reduce

>>> reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])

10

 

filter(함수, 리스트)

리스트에 들어있는 원소들을 함수에 적용시켜서 결과가 참인 값들로 새로운 리스트를 만들어준다.

>>> list(filter(lambda x: x < 5, range(10)))

[0, 1, 2, 3, 4]


'Programming > Python' 카테고리의 다른 글

파일 입출력  (0) 2017.05.08
사용자 입출력  (0) 2017.05.08
함수  (0) 2017.05.08
for 문  (0) 2017.05.08
while 문  (0) 2017.05.08

파일 생성하기

f = open("새파일.txt", 'w')

f.close()

파일 객체 = open(파일 이름, 파일 열기 모드)

파일 열기 모드

파일열기모드

설명

r

읽기모드 - 파일을 읽기만 할 때 사용

w

쓰기모드 - 파일에 내용을 쓸 때 사용

a

추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

 

파일을 쓰기 모드로 열게 되면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다.

 

파일을 쓰기 모드로 열어 출력값 적기

 

f = open("C:/Python/새파일.txt", 'w')

for i in range(1, 11):

    data = "%d번째 줄입니다.\n" % i

    f.write(data)

f.close()

위의 프로그램을 다음 프로그램과 비교해 보자.

 

for i in range(1, 11):

    data = "%d번째 줄입니다.\n" % i

print(data)

두 프로그램의 다른 점은 data를 출력하는 방법이다. 두 번째 방법은 우리가 계속 사용해 왔던 모니터 화면에 출력하는 방법이고, 첫 번째 방법은 모니터 화면 대신 파일에 결과값을 적는 방법이다. 두 방법의 차이점은 print 대신 파일 객체 fwrite 함수를 이용한 것이다.

 

 

프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

readline()

f = open("C:/Python/새파일.txt", 'r')

line = f.readline()

print(line)

f.close()

 

readlines()

f = open("C:/Python/새파일.txt", 'r')

lines = f.readlines()

for line in lines:

    print(line)

f.close()

readlines() 함수는 파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트로 리턴한다. 따라서 위의 예에서 lines["1 번째 줄입니다.\n","2 번째 줄입니다.\n",..., "10 번째 줄입니다.\n"]라는 리스트가 된다.

 

read()

f = open("C:/Python/새파일.txt", 'r')

data = f.read()

print(data)

f.close()

 

f.read()는 파일의 내용 전체를 문자열로 리턴

 

파일에 새로운 내용 추가하기

쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열 경우 그 파일의 내용이 모두 사라지게 된다. 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우 경우에는 파일을 추가 모드('a')로 열면 된다.

 

f = open("C:/Python/새파일.txt",'a')

for i in range(11, 20):

    data = "%d번째 줄입니다.\n" % i

    f.write(data)

f.close()

 

추가 모드로 파일을 열었기 때문에 새파일.txt라는 파일이 원래 가지고 있던 내용 바로 다음부터 결과값을 적기 시작한다.

 

with문과 함께 사용하기

with open("foo.txt", "w") as f:

f.write("Life is too short, you need python")

위와 같이 with문을 이용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close되어 편리하다. (with구문은 파이썬 2.5부터 지원됨)

 

sys 모듈로 입력 인수 주기

import sys

args = sys.argv[1:]

for i in args:

    print(i.upper(), end=' ')

문자열 관련 함수인 upper()를 이용하여 명령 행에 입력된 소문자를 대문자로 바꾸어 주는 간단한 프로그램이다. 도스창에서 다음과 같이 입력해 보자.

 

C:\~>python sys2.py life is too short, you need python

LIFE IS TOO SHORT, YOU NEED PYTHON

 

argv[0] : 프로그램명

argv[1:] : 인수요소


참조 : 점프 투 파이썬 (https://wikidocs.net/26)

'Programming > Python' 카테고리의 다른 글

Lambda함수  (0) 2017.05.10
사용자 입출력  (0) 2017.05.08
함수  (0) 2017.05.08
for 문  (0) 2017.05.08
while 문  (0) 2017.05.08

input의 사용

>>> a = input()

Life is too short, you need python

>>> a

'Life is too short, you need python'


input은 입력되는 모든 것을 문자열로 취급한다.

print의 사용

>>> number = input("숫자를 입력하세요: ")

숫자를 입력하세요: 3

>>> print(number)

3

 

 

>>> print("life" "is" "too short")

lifeistoo short

 

>>> print("life", "is", "too short")

life is too short

 

 

한 줄에 결과값 출력하기


한 줄에 결과값을 계속 이어서 출력하려면 입력 인수 end를 이용해 끝 문자를 지정해야 한다.

 

>>> for i in range(10):

...     print(i, end=' ')

...

0 1 2 3 4 5 6 7 8 9



참조 : 점프 투 파이썬(https://wikidocs.net/25)

'Programming > Python' 카테고리의 다른 글

Lambda함수  (0) 2017.05.10
파일 입출력  (0) 2017.05.08
함수  (0) 2017.05.08
for 문  (0) 2017.05.08
while 문  (0) 2017.05.08

함수의 구조

def 함수명(입력 인수):

    수행할 문장1

    수행할 문장2

    ...

 

 

입력값이 여러 개일 때

def 함수이름(*args):

    수행할 문장

    ...

일반적으로 볼 수 있는 함수 형태에서 괄호 안의 입력 인수 부분이 *args로 바뀌었다.

 

)

>>> def sum_many(*args):

... sum = 0

... for i in args:

...     sum = sum + i

... return sum

...

 

return값이 2개이상일때

>>> def sum_and_mul(a,b):

... return a+b, a*b

튜플값으로 리턴된다. (a+b, a*b)

 

인수에 초깃값을 미리 설정해 주는 경우

def say_myself(name, old, man=True):

print("나의 이름은 %s 입니다." % name)

print("나이는 %d살입니다." % old)

if man:

    print("남자입니다.")

else:

    print("여자입니다.")

 

함수 입력 인수에 초깃값을 설정할 때 주의할 사항

def say_myself(name, man=True, old):

print("나의 이름은 %s 입니다." % name)

print("나이는 %d살입니다." % old)

if man:

    print("남자입니다.")

else:

    print("여자입니다.")

 

이전 함수와 바뀐 부분은 초깃값을 설정한 인수의 위치이다. 이것은 함수를 실행할 때 오류가 발생한다.


참조 : 점프 투 파이썬(https://wikidocs.net/24)

'Programming > Python' 카테고리의 다른 글

파일 입출력  (0) 2017.05.08
사용자 입출력  (0) 2017.05.08
for 문  (0) 2017.05.08
while 문  (0) 2017.05.08
if-elif-else 문  (0) 2017.05.07

표현식

표현식

 설명 

 ^

 문자열의 시작

 문자열의 종료

.

 임의의 한 문자 (문자의 종류 가리지 않음)

 , \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

 앞 문자가 하나 이상

 앞 문자가 없거나 하나있음

 [ ]

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 { }

 횟수 또는 범위를 나타낸다.

 ( )

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

 

1) 숫자만 : ^[0-9]*$

2) 영문자만 : ^[a-zA-Z]*$

3) 한글만 : ^[-]*$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

 

특수 문자 자체를 검색하기 및 사용하기



\^

^

\.

.

\[

[

\$

$

\(

(

\)

)

\|

|

\*

*

\+

+

\?

?

\{

{

\\

\

\n

줄넘김 문자

\r

리턴 문자

\w

알파벳과 _ (언더바)

\W

알파벳과 _ 가 아닌 것

\s

빈 공간(space)

\S

빈 공간이 아닌 것

\d

숫자

\D

숫자가 아닌 것

\b

단어와 단어 사이의 경계

\B

단어 사이의 경계가 아닌 것

\t

Tab 문자

\xnn

16진수 nn에 해당하는 문자


※ [ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.

 

참조 :

http://highcode.tistory.com/6

http://lng1982.tistory.com/141

http://iamnotokay.tistory.com/85 [I am not Okay]



'Programming > 정규표현식' 카테고리의 다른 글

정규 표현식이란?  (0) 2017.05.07

구조

for 변수 in 리스트(또는 튜플, 문자열):

    수행할 문장1

    수행할 문장2

...

 

Range()

for문은 숫자 리스트를 자동으로 만들어 주는 range라는 함수와 함께 사용되는 경우가 많다.

>>> a = range(10)

>>> a

range(0, 10)

range(10)0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.

 

시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.

 

>>> a = range(1, 11)

>>> a

range(1, 11)


for문과 range() 예시 

forrange 함수를 이용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.

>>> sum = 0

>>> for i in range(1, 11):

...     sum = sum + i

...

>>> print(sum)

55

range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 갖는 객체이다. 따라서 위의 예에서 i 변수에 리스트의 숫자들이 1부터 10까지 하나씩 차례로 대입되면서 sum = sum + i라는 문장을 반복적으로 수행하고 sum은 최종적으로 55가 된다.


참조 : 점프 투 파이썬(https://wikidocs.net/22)

'Programming > Python' 카테고리의 다른 글

사용자 입출력  (0) 2017.05.08
함수  (0) 2017.05.08
while 문  (0) 2017.05.08
if-elif-else 문  (0) 2017.05.07
자료형(6) - 집합(Set)  (0) 2017.05.07

while 조건문 :

    수행할 문장1

    수행할 문장2

    수행할 문장3

    ...

 

무한루프

while true : 

    ~~~


 

break

while문을 강제로 빠져 나간다.

 

continue

while문 안의 문장을 수행할 때 입력된 조건을 검사해서 조건에 맞으면 while문의 맨 처음(조건문)으로 다시 돌아가게 한다.



참조 : 점프 투 파이썬(https://wikidocs.net/21)

'Programming > Python' 카테고리의 다른 글

함수  (0) 2017.05.08
for 문  (0) 2017.05.08
if-elif-else 문  (0) 2017.05.07
자료형(6) - 집합(Set)  (0) 2017.05.07
자료형(5) - Dictionary  (0) 2017.05.07

+ Recent posts