문자열 (string)문자,단어 등으로 구성된 집합 !!


"Hello world"

"a"

"123"


1. 큰따옴표

"Hello world"


2. 작은 따옴표


'Hello world'


3. 큰따옴표 3개


"""Hello World"""


4. 작은따옴표 3개


'''Hello World'''



출력결과로


Apple's favorite fruit 를 보고 싶을때


fruit = "Apple's favorite fruit"  와 같이 " 로 묶어 주어야 한다. 


해당을


fruit = 'Apple's favorite fruit' 라고 했을시  Syntax Error 가 발생한다.


    food = 'Apple's favorite fruit'

                  ^

SyntaxError: invalid syntax



Apple"s favorite fruit 를 보고 싶을 때는 반대로


fruit = 'Apple"s favorite fruit' 로   ' 로 묶어 주어야 한다. 




\(백슬래시)를 이용해서 작은 따옴표와 큰따옴표도 인식이 가능 


\" 를 입력하게 되면 \앞에 "는 문자열을 묶는것이 아닌 자체로 인식

\' 도 마찬가지 




back =" \" Apple is very good \" he said."
print("food ",back)


결과

food   " Apple is very good " he said.


!!!!! 여러 줄 처리하기 

Apple is Good

Good is Apple




fruit = "Apple is good \n Good is Apple"

print(fruit)


' \n' 코드가 핵심  하지만 가독성이 매우 떨어지기 때문에 다른방법을 사용해야 한다.


"""문자열""" 로 묶어서 사용


fruit = "Apple is good \n Good is Apple"
multi = """Apple is good
Good is Apple
"""
print(fruit)
print(multi)

결과


Apple is good 

 Good is Apple

Apple is good

Good is Apple


물론 ''' 문자열''' 로 작은따옴표도 사용이 가능하다.


***** 파이썬 이스케이프 코드


\n     문자열 안에서 줄을 바꿀 때 사용

\t        문자열 사이에 탭 간격을 줄 때 사용

\\        문자\을 그대로 표현할 때 사용

\'            작은따옴표(')를 그대로 표현

\"            큰따옴표(")를 그대로 표현

\r            캐리지 리턴(줄바꿈후 현재 커서를 가장 앞으로 이동)

\f            폼 피드(줄바꿈 후 현재 커서를 다음 줄로 이동)

\a            벨 소리(출력시 PC스피커에서 삑소리)

\b            백 스페이스

\000         널 문자



&&&& 문자열 연산 



1. 문자열 더해서 연결 


start = "Start is "
End = "End "

print(start+End)

결과

Start is End


2. 문자열 곱셈


Start ="Product String\t"

print(Start*2)


결과


Product String Product String


곱셈 (2)


sp = "*"


print(sp*60)
print(sp*26,"Start",sp*26)
print(sp*60)


결과


************************************************************

************************** Start **************************

************************************************************



>>> 문자열 인덱싱과 슬라이싱 


1. 인덱싱


문자열 꺼내기 (1)


Index ="Apple is Very good"


print(Index[6],Index[7],Index[8],Index[0],Index[1],Index[2],Index[3])

결과

i s   A p p l


인덱싱은 0부터 시작된다. 


문자열 꺼내기 (2)


Index ="Apple is Very good"


print(Index[-6],Index[-7],Index[-8],Index[-0],Index[-1],Index[-2],Index[-3])

print(Index[-0])



결과

y r e A d o o

A



-1 은 맨뒤에 첫번 째 숫자 부터 가리키게 된다. 

0 과 -0은 같은 숫자이기 때문에 0은 -0으로 표시하여도 첫번째 숫자가 표시됨을 확인 할수 있다. 


2. 슬라이싱


slice ="Apple is Very Good"
print(slice[0:6])

결과


Apple


slice의 0~5까지의 문자열을 하나씩 꺼내서 출력 한다. 


주의할점 : ************* slice[0:6] 의 뜻은 slice 의 0<=slice <6으로 해석이 되기때문에 0~ 5까지의 문자열이 출력된다. 오해하면 안된다.


꼭 시작점과 끝점을 표시안해도 상관은 없다.

slice[4:] 으로 표시시 시작번호부터 끝까지 출력 한다. 4~끝까지 출력 

slice[:7] 시에는 0~7까지 출력



slice의 예

#  테스트 파이썬

a="20160725HotSummer"
date=a[:8]
weather =a[8:]
print("date is ",date)
print("weather ",weather)


결과


date is  20160725

weather  HotSummer


1번째 줄 a[:8] 이면 0~7까지  0 <= a < 8 로 표현이 되기때문에 0 ~ 7까지의 문자열들이 보여지게 된다.

2번째 줄 a[8:] 이게 되면  8< = a < ~ 이기 때문에 8부터 끝 문자열까지 모두 표현 을 해준다.



문자열의 값들을 인덱싱을 이용하여서 꺼낼순 있지만 문자열의 요소값은 바꿀수 있는 값이 아니다.


문자열,튜플 등의 자료값은 변경이 불가능하다 (immutable한 자료형이라고도 한다. )

 C++에 mutable 이라는키워드가있는데 클래스 변수가 mutable int m_int;로 선언시


void show() const

{

// const으로 되어있기 때문에 변경이 불가능하지만 mutable변수에 대해서는 변경이 가능

}

mutable 선언은 멤버 변수의 조작이 가능한 변수로 선언을 하겠다는 의미를 가지고있는데


많이 사용하는것을 보지못했지만 이 의미와 상반되는 의미의 immutable 한 자료형이라고 하는거같다.












'개발일지(Language) > Python(3.x)' 카테고리의 다른 글

7 - 문자열 포매팅(발전)  (0) 2016.07.26
6 - 문자열 포매팅(기본)  (0) 2016.07.26
4 - 연산자  (0) 2016.07.25
3 - 숫자형  (0) 2016.07.25
2 - 에디터  (0) 2016.07.25

기본적인 연산자가 있는데 순서대로 확인해본다.


1. ** 연산자 


a=3
b=4
a**b
# 3 * 3 * 3* 3 9 27 81
print(a**b)


결과


81 


3**4 가되어서 3을 4번 곱하는 형식이 된다. x의 y제곱을 나타낸다. 






2. % 연산자


print("print 7%3 " ,7%3)

print("print 3%7 ", 3%7)

결과

print 7%3  1

print 3%7  3



%연산자는 나머지 값을 반환 한다. 

7을 3으로 나눴을시에 몫이 2 이고 나머지가 1이기 때문에 결과는 1이 된다. 

3을 7로 나눴을시에는 몫이 0이고 나머지가 3이 기때문에 결과는 3이 된다.


3. / 연산자 


7/4


결과

1.75



7나누기 4를 하고 결과는 1.75



4. // 연산자 

7//4


결과

1


나눗셈 결과에 대한 몫의 소수점을 버리는 연산자 





















'개발일지(Language) > Python(3.x)' 카테고리의 다른 글

6 - 문자열 포매팅(기본)  (0) 2016.07.26
5 - 문자열 과 자료형  (0) 2016.07.25
3 - 숫자형  (0) 2016.07.25
2 - 에디터  (0) 2016.07.25
1 - 설치  (0) 2016.07.25

기본 중의 기본 으로 숫자형으로 볼수 있다.


C,C++에서는


int, short, long, unsigned int , double 등 엄청 많고


JAVA 에서는 동일하지만 Wrapper클래스라고


Integer등등 존재한다.  파이썬에서는 딱히 자료형에 대한 선언은 하지않고 들어가는 방식이다.


기본적인 숫자형 테이블에 대해 보면


정수 : 123, -345, 0


실수 123.45, -1234.5, 3.4e10


복소수 1+2j, -3j


8진수 0o(알파벳o 혹은 O)12 0O12 0o12


16진수 0x1A,0xFF


1. 정수형 


정수형이란 양의정수와 음의 정수 와 숫자 0을 대입하는 것을 말한다.


a = 1 

a = -1

a = 0 


2. 실수형


실수형이란 소수점이  포함된 숫자를 말한다.


a= 1.2

a = -1.2


a= 4.24E10

a = 42.4e-10


4.24E10 = 4.24*10(10승)

4.24e-10은 = 4.24*10(-10승)



3. 8진수와 16진수


8진수(Octal) 숫자 0O 혹은 0o(숫자 0 + 알파벳 o 대문자 혹은 소문자 )


16진수(Hexadecimal) 0x로 시작하면된다.


복소수 : a = 1+2j



***** 복소수의 경우에는 내장함수가 있다. 


a = 1+2j



a.real = 실수 부분을 리턴 한다.

a.imag 는 허수 부분을 리턴 한다. 

a.conjugate() 는 켤레 복소수를 리턴 한다.

abs(복소수) 복소수의 절댓값을 리턴 


print(a)
print("a.real function")
print("a.real",a.real)
print("a.imag function")
print("a.imag",a.imag)
print("a.conjugate function")
print("a.conjugate",a.conjugate())
print("a.abs function")
print("a.abs",abs(a))

결과 

(1+2j)

a.real function

a.real 1.0

a.imag function

a.imag 2.0

a.conjugate function

a.conjugate (1-2j)

a.abs function

a.abs 2.23606797749979



**** 파이썬 2.7에서 3/4를 사용시

0.75가 아닌 0이 출력된다.  파이썬 2x에서는 정수형/ 정수형 시에는 정수형이 리턴된다. 


'개발일지(Language) > Python(3.x)' 카테고리의 다른 글

6 - 문자열 포매팅(기본)  (0) 2016.07.26
5 - 문자열 과 자료형  (0) 2016.07.25
4 - 연산자  (0) 2016.07.25
2 - 에디터  (0) 2016.07.25
1 - 설치  (0) 2016.07.25

파이썬을 사용하기 위한 에디터로는 아직 아무것도 모르는 초창기이기에 만인이 사용하는 것을 사용하도록 한다.


파이참이다.


파이참의 다운로드 주소는


http://www.jetbrains.com/pycharm/download/ 에서 다운로드 받도록 한다.


일단 필자는 Community Edition 버전으로 받았다.  Pro버전은 30일 트라이얼 버전이고  여러가지 프레임워크를 지원하며 기능이 많겠지만 아직은 필요가 없다고 느껴지기 때문이다.


설치시에 나오는 .py 체크  *.py 에 대한 자동으로 pycharm 으로 연결하겠다는 조건이며 체크 해줘도 되고 안해도 된다. 



keymap scheme : visual studio 


IDE theme: Darcula


Editor colors and fonts : Darcula 


이게 제일 맘에 든다. 


처음 실행하게 되면  Location 지정하는게 나오는데 이클립스와 조금 비슷한 개념으로 설정되는거같다. 저같은 경우는


Desktop\Python 으로 지정하고 실행


실행하고 나서 해당 프로젝트에 python 파일을 만들어야 파이썬 코딩을 할 수 있다.


그리고 작성해본다.  헬로우 월드

# hello world.py

print("Hello world")


하고 저장하게되면

Desktop\Python\.idea\에 hello.py 가 생성된다.


cmd창을 킨후에 해당 경로로 이동해서 python hello.py 를 입력하게 되면 해당 파이썬이 실행된다.


실행결과 확인 이로써 기본 에디터 준비까지 마쳤다.


아 파이참은 IDE이기 때문에 파이참에서도 실행 할수 있다.

Alt + Shift + F10 으로 Run 할수 있다. 




'개발일지(Language) > Python(3.x)' 카테고리의 다른 글

6 - 문자열 포매팅(기본)  (0) 2016.07.26
5 - 문자열 과 자료형  (0) 2016.07.25
4 - 연산자  (0) 2016.07.25
3 - 숫자형  (0) 2016.07.25
1 - 설치  (0) 2016.07.25

파이썬에 대한 이야기는 너무 많은 자료들이 있어서 그냥 생략 하도록 한다.


어차피 이걸 보거나 들어오게 되는 사람은 파이썬에 대한 생각을 가지고 올테니 그냥 시작하면 될거 같다.


나 또한 지금 파이썬을 처음 켜보았다. 


그리고 현재부터 작성되는 글은 모두 윈도우에서 작업 합니다. 


우선 파이썬을 다운로드 해보자 http://www.python.org/downloads 에서 윈도우용 파이썬을 다운로드 할수 있다.


들어가게되면

좌측에 3.x 버전과 우측에 2.x 버전이 있는데 마음에 드는걸로 하면 된다.


* 2.x 프로그램은 3.x에서 지원되지 않는점 잊지 말아야 한다. 



설치파일 실행시 Install Now 로 실행하면 된다. (이걸 쓰는 순간은 이미 설치가되어있어서 이미지 생략)


그리고 밑 부분에 Add_Python 3.5 to PATH 를 체크 해주고 설치한다.


설치가 완료 되었다면 시작 - 모든 프로그램 - Python3.5 폴더가 생성된다.


해당 보이시는 파일에 Python 3.5 (32-bit)을 클릭해서 실행하면 된다 저같은 경우는 마우스 우클릭 보내기-> 바탕화면 보내기로  바로가기를 만들어서 사용 중


Python3.5 (32 -bit)을 키고 간단한 실습 정도를 해보자


>>> 는 프롬프트(prompt)라고 한다. 


일단 종료는 Ctrl +Z  -> Enter 를 치게 되면 종료가 된다.


또한 >>> 옆에다가 

>>> import sys

>>> sys.exit() 하고 엔터를 처도 종료가 된다.


기초 연산 


>>> 1 + 2 

3


>>> 5/3

1.66666~7


변수 선언도 역시


>>>a=1

>>>b=2

>>>a+b 

3


신기한점 복소수도 된다.

a =5+9j

b = 3

a *b

(15+27j) 가 출력이 된다.


if 문의 경우에 특이한점을 보았다.


>>>a=3

>>>if a>1:

. . . print("a is greater than 1")   (if a>1: 하고 엔터를 치게되면 자동적으로 옆에 ... 이 생기게 되는데 


이 상태에서 바로 print("a is grater than 1") 이라고 입력하게 되면


IndentationError : expected an indented block 이라는 에러가 발생한다. (들여쓰기를 해주지 않아서이다.)


스페이스바를 4번 넣고나서 print~ 를 입력하게 되면

한번더 ... 이 생기게 된다.

... 이 있다는 것은 아직 문장이 끝나지 않았음을 의미한다.

이상태에서 엔터를 한번더 치게되면


a is greater than 1 이라는 결과가 나타난다.



반복문 for 



4의 스페이스바로 공백을 넣어 주어야 한다.  혹은 Tab키를 이용 


반복문 while


함수 def

gugu 함수 

def gugu(a,b):

i=0

while i<b:

i=i+1

print(a*i)


a숫자의 b단까지 출력

gugu(3,7) 3의 7단까지 출력 



'개발일지(Language) > Python(3.x)' 카테고리의 다른 글

6 - 문자열 포매팅(기본)  (0) 2016.07.26
5 - 문자열 과 자료형  (0) 2016.07.25
4 - 연산자  (0) 2016.07.25
3 - 숫자형  (0) 2016.07.25
2 - 에디터  (0) 2016.07.25

type java = 무언가 나오면 자바가 설치 되었거나 설정 되었다는 뜻 


java -version : 자바 버전 확인


Open JDK 와 Oracle JDK 의 차이 


Open JDK 는 2007 년 Java의 오픈소스화를 위하여 Sun 에서 저작권자가 제공을 거부한 컴포넌트들을 제외한 JDK를 제공하여 시작된 프로젝트 이다.


별개로 oracle에서 제공하는 JDK는 Oracle JDK 라고 한다.


OpenJDK Overview

Sun(현재 Oracle)이 JDK 7을 개발하기 시작할 때 이전과 다른 점이 하나 있었는데, Sun이 JDK를 오픈소스화 하기 위해 2007년 OpenJDK를 만들었다는 것이다. (OpenJDK는 완전한 Free의 오픈소스 코드를 기반으로 Fully buildable한 Java Development Kit을 배포하기 위한 Sun의 노력이다.)

Sun이 3rd-Party 라이브러리의 저작권자에게 오픈소스로 공개할 수 있도록 설득하고자 했으나 잘되지 않았고, 저작권자가 오픈소스화를 거부한 일부 컴포넌트를 제외한 나머지 JDK 소스코드 전부를 OpenJDK에 제공했고, OpenJDK는 이를 기반으로 이외의 컴포넌트들의 대안 코드를 마련하면서 JDK7 프로젝트를 시작했다.

Oracle's Plan for OpenJDK

아래는 OpenJDK FAQ (http://openjdk.java.net/faq/) 의 주요 내용을 요약한 내용 이다.

Oracle은 OpenJDK에 참여하는가?

Oracle은 OpenJDK 프로젝트를 주도하는 주체이며, 오픈소스모델은 기술적인 발전을 위한 가장 좋은 방법이기 때문에 OpenJDK를 향상시키기 위한 노력을 계속 할 것이다.

OpenJDK의 License 모델을 변경될수 있는가?

OpenJDK Community는 지속적으로 Oracle에 의해 운영되며, 뿐만 아니라 이외의 기업, 연구원 또는 개인에 의해 GPL-based 라이센스를 가지며, 변경될 계획은 없다.

OpenJDK Users & Contributors

Ubuntu / Fedora / Red Hat Enterprise 와 같은 메이저 리눅스 제공자는 배포시에 OpenJDK를 기본 Java SE 구현체로 제공하고 있다.
추가적으로 Eclipse Community의 2010 설문에서는 개발자의 21%가 OpenJDK를 사용하고 있다고 응답하였다.

OpenJDK 와 OracleJDK 스펙

Oracle JDK는 OpenJDK를 기본으로 하는가?

그렇다. Oracle JDK는 OpenJDK의 JDK7 기반에 추가로 OpenJDK에 포함되지 않은 Component까지 모두 갖춘 프로젝트이다.

아래와 같이 Vendor에 의한 분리된 Version이 존재하는데,

  • Oracle's JDK (Commertial support from oracle)
  • OpenJDK, the open source java

JDK7 이전에는 두 Version간 큰 차이가 존재해 OpenJDK는 Oracle JDK에 비해 누락된 기능 및 성능이슈가 존재 했으나,
현재는 java-web-plugin(http://en.wikipedia.org/wiki/IcedTea - 저작권이 있는 라이브러리의 대안으로 작성된)을 제외하고는 정확하게 같다고 볼 수 있다. 몇몇 사람들은 아직도 OpenJDK가 Oracle JDK에 비해 성능이 떨어진다고 하지만, 이것은 근거없는 말이다.

  • 두 Version은 모두 Java SE 7 JSR(JSR 336) Spec 을 구현하였다.

Dodgy Version History

OpenJDK7를 사용 한다면 Oracle JDK7와 동일하게 안전하다고 볼 수 있지만, 그에 비해 OpenJDK6은 안정적이지 않는 History가 있는데, 진행 중인 프로젝트인 OpenJDK7를 기초로 JDK7 스펙을 제거하는 방식으로 JDK6과 Compatible 하도록 진행 됐기 때문이다.
OpenJDK6에서는 파일 처리와 같은 기본적인 OS-Integration 관련 기능과 네트워크 처리 및 Swing 에서 몇몇 문제점이 Report 되고 있다고 한다. OpenJDK를 사용시에는 꼭 OpenJDK7 를 사용하도록 한다.



  • JDK6을 사용하고 있을 때, OpenJDK로 이관한다면 JDK6 -> JDK7로의 변경시의 이슈가 더욱 중요해 보인다.

JVM

OpenJDK 프로젝트는 아래와 같은 몇몇 Component로 구성되어 있는데,

  • HotSpot VM
  • The Java Class Library
  • Java Compiler

VM 역시 Oracle에 의해 제공되는 HotSpot VM Spec과 동일하다.

이외 Vendors
OpenJDK는 오픈소스이기 때문에 RedHat 과 같은 Vendors에 의해서 Customized 되어 배포된다면 VM에 차이가 있을 수 있다. 하지만 물론 Vendor's VM은 배포시에 Java Trademark를 사용하기를 원한다면 Java TCK에 일치하는 것을 증명해야 한다.

Source 빌드 및 Binary 배포 이슈

OpenJDK는 소스코드만 배포하고 있어, 직접 빌드해야하나? 라는 의문이 생길수 있지만 아래와 같이 리눅스에서 rpm 패키지로 다운로드 및 설치가 가능 하다.


Debian, Ubuntu, etc
$ sudo apt-get install openjdk-7-jre
Fedora, Oracle Linux, Red Hat Enterprise Linux, etc.
$ su -c "yum install java-1.7.0-openjdk"


OpenJDK Quality Metrics

http://openjdk.java.net/groups/quality/metrics/


OpenJDK의 사용 범위

OpenJDK를 통해 JVM기반의 오픈소스를 이용하여 서비스 및 플랫폼 운영 시에 성능 이슈가 있는지 확인한다.



JVM 기반의 오픈소스 플랫폼 및 Spring과 같은 Java기반의 오픈소스

JVM기반의 오픈소스 사용시에는 Requirements 스펙에 JDK Version이 명시되어 있는지 확인한다.

  • Apache Kafka / Netty / MongoDB / Cassandra ...
  • https://github.com/apache/cassandra 페이지를 예를 들면 Requirements 항목에 Java >= 1.7 (OpenJDK and Oracle JVMS have been tested) 라고 명시되어 있는 것을 볼 수 있다.

CI / Build

  • Java 기반의 Ant/Maven/Gradle 과 같은 빌드 도구를 사용하는 빌드서버는 OpenJDK를 이용한다.

Tomcat / Application

  • Tomcat 및 Application 레벨에서 OpenJDK를 이용한다.


OpenJDK 설치

JDK Download

JDK 설치 및 Tomcat 설치 Script


결론 & OpenJDK 이관시 Risk

위의 내용을 바탕으로 OpenJDK 는 Java 플랫폼의 Next Version인 JDK7의 근간이 되는 프로젝트로서, JDK7를 기준으로 Oracle 에서 Binary로 배포되는 JDK와 OpenJDK는 차이가 없다고 봐도 무방하다.
하지만 실제 서비스에 적용하기 위해서는 사내에 OpenJDK 적용 사례가 있는지 확인 할 필요가 있어보이고, 서비스에 직접적으로 영향을 미치지 않는 관리자도구 등에 시범적으로 적용하여 레퍼런스를 쌓아가는 것도 바람직해보인다.

만약 JDK6 기반에서 운영하는 서비스가 있다면 JDK7으로의 변경으로 인한 이슈를 살펴 볼 필요가 있다.
추가적으로 어플리케이션/빌드 및 배포/플랫폼 전반에 JVM기반의 오픈소스를 사용시에는 OpenJDK의 지원여부 및 성능 및 안정성에 대한 이슈를 자세히 체크 해야 한다.

참고

References
FAQ



출처 : http://stunstun.tistory.com/222 


+ Recent posts