'Programming'에 해당하는 글 367건

반응형

 

그 동안의 무심함에 미안함을 조금 가지며 JAVA 근황을 좀 살펴 보았다. 보아하니 발전을 많이 했다기 보다 버전만 열심히들 올렸네. 8인가 열심히 쓰고 있었는데 16이라니... 앞으로 신규 프로젝트들은 뭘루 시작해야 하나. OpenJDK 8 과 11 사이에서 어떤 것이 현명한 선택인지 모르겠다.

 

 

OpenJDK

Download and install the open-source JDK for most popular Linux distributions. Oracle's free, GPL-licensed, production-ready OpenJDK JDK 16 binaries are at jdk.java.net/16; Oracle's commercially-licensed JDK 16 binaries for Linux, macOS, and Windows, bas

openjdk.java.net

 

AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

 

Java 버전 별 변경점들을 정리해 봤다.


Java SE 17 LTS (2021.09)

  • Java 8, 11 을 잇는 세번째 LTS 버전(3년마다 배포)
  • 애플릿 완전 제거

 

Java SE 16 (2021.03)

  • OpenJDK 버전관리가 Mercurial 에서 Git 으로 변경.
  • jpackage 명령어로 자바 프로그램 손쉽게 배포(pkg, deb, msi 등)
  • 패턴 매칭 정식 지원
  • Record 형식 정식 지원

 

Java SE 15 (2020.09)

  • EdDSA 암호화 알고리즘 추가
  • 다중 텍스트 블록 (""")

 

Java SE 14 (2020.03)

  • instanceof 패턴 매칭
  • record (data object) 선언 기능 추가

 

Java SE 13 (2019.06)

  • switch 문에 yield 예약어 추가

 

Java SE 12 (2019.03)

  • Switch 문의 확장 : case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); 

 

Java SE 11 LTS (2018.09)

  • 일반 지원은 2023년 9월, 연장 지원은 2026년 9월에 종료될 예정
  • Oracle JDK 와 Open JDK 통합 (Oracle JDK는 구독형 유료 모델로 전환)
  • 이클립스 재단으로 넘어간 Java EE가 JDK에서 삭제되고, JavaFX도 JDK에서 분리되어 별도의 모듈로 제공. 
  • 람다 파라미터에 대한 지역변수 문법 변경: (var x, var y) -> x.process(y) => (x, y) -> x.process(y)
  • HTTP 클라이언트 표준화 기능 추가 (jdk.incubator.http 패키지가 표준화되어 java.net.http 패키지로 추가)
  • 엡실론(Epsilon) 가지비 컬렉터 : 오버헤드의 최저지연과 할당 제한이 가능한 완전한 수동 가비지 컬렉터 적용

 

Java SE 10 (2018.03)

  • var 키워드를 이용한 지역변수 선언 및 타입추론 가능
  • 병렬 처리 가비지 컬렉션 도입으로 인한 성능 향상
  • JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당 가능
  • 루트 CA 목록 추가
  • JDK의 Repository가 하나로 통합
  • Deprecated된 API는 Java SE 10에서 모두 삭제

 

Java SE 9 (2017.09)

  • Jigsaw 기반 런타임 모듈화(기존 jar 방식 개선)
  • JAVA 를 인터프리터 언어 쉘처럼 사용할 수 있는 JShell 추가
  • immutable collection / HTTP/2 / private 인터페이스 메소드 / HTML5 Javadoc / 프로퍼티 파일에 UTF-8 지원
  • 1.x 버전에서 9.0 으로 판올림이 일어나며, 6개월마다 새로운 버전 업데이트

 

Java SE 8 (2014.03)

  • Oracle JDK vs Open JDK (오라클 인수 후 첫번째 버전)
  • Lambda 표현식 및 함수형 프로그래밍
  • 날짜 및 시간 API(java.time 패키지)
  • Stream API 추가
  • JavaScript 엔진 Rhino -> Nashorn
  • 32비트를 지원하는 마지막 공식 Java 버전

 

Java SE 7 (2011.07)

  • Switch 문에서 문자열 사용 가능 : case "MON"
  • generics 타입 추론(생략 가능) : Map<String, Object> map = new HashMap<>();
  • try-with-resources 자동 리소스 해제(close) : try (SomeResource resource = getResource()) { ...
  • Diamond Operator <> 지원
  • 멀티프로세서 처리 : Fork/Join Framework
  • ECC 암호화 내장
  • 이진수 표현 (2진수는 0b, 8진수는 0, 16진수는 0x로 시작)

 

Java SE 6 (2006.12)

  • J2SE 에서 Java SE 로 표기가 바뀜.
  • JDBC 4.0, Java Compiler API, Pluggable Annotation 등이 추가
  • Rhino JavaScript 엔진이 기본으로 탑재

 

Java SE 5 (2004.09)

  • generics, annotation, enum, foreach, ...

 

반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
반응형

파이썬에서는 문자열을 표시하는 큰다옴표(") 나 따옴표(') 앞에 인코딩을 표시하는 u, b, r 등의 접두사가 붙는 것을 볼 수 있다. 기본은 u(UTF-8) 이며, 바이너리는 b(binary), 원시 문자열은 r(raw) 를 사용한다. 


파이썬 3.6 부터는 이스케이프 시퀀스(\n, \t, \\, ...) 가 아닌 백슬러시 문자셋을 사용하면 DeprecationWarning 를 표시한다. 현재는 deprecate 지만 곧 SyntaxError 가 될 것이다. 이스케이프 문자(\)를 포함하는 이스케이프 시퀀스, 경로나 정규 표현식 등을 표현할 때는 원시 문자열인 r 을 사용한다.


# Anti-pattern
regex = '\.png$'
 
# Best practice
regex = r'\.png$'
cs




반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  2개가 달렸습니다.
  1. 뼛속문과 2021.03.07 14:52
    파이썬 독학하는데 계속 오류나서 검색하다가 발견하고 드디어 오류 고쳤네요ㅠ감사합니다!
secret
반응형

pip 로 특정 패키지 설치시 Visual C++ 컴파일러를 요구하는 오류 메시지가 발생할 수 있다.


error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/


하지만 링크를 따라가면... Visual C++ 14.0 에 대응하는 Visual Studio 버전이 뭔지를 알아야...ㅋㅋ 윈도우 계열 개발을 해본 적이 없어서 참 어리버리하구용... 모를 땐 최신버전이지... 하고 Visual Studio 2019 Build Tools 를 깔으려 했더니 6.4G 필요하단다... ㅡ.ㅡ 



파이썬 사이트(https://wiki.python.org/moin/WindowsCompilers)에 보면 Visual Studio 버전별 컴파일러를 잘 설명해 놨다.


Microsoft Visual C++ 14.2 standalone: Build Tools for Visual Studio 2019 (x86, x64, ARM, ARM64)

Microsoft Visual C++ 14.2 with Visual Studio 2019 (x86, x64, ARM, ARM64)

Microsoft Visual C++ 14.1 standalone: Build Tools for Visual Studio 2017 (x86, x64, ARM, ARM64)

Microsoft Visual C++ 14.1 with Visual Studio 2017 (x86, x64, ARM, ARM64)

Microsoft Visual C++ 14.0 standalone: Visual C++ Build Tools 2015 (x86, x64, ARM)

Microsoft Visual C++ 14.0 with Visual Studio 2015 (x86, x64, ARM)

Microsoft Visual C++ 10.0 standalone: Windows SDK 7.1 (x86, x64, ia64)

Microsoft Visual C++ 10.0 with Visual Studio 2010 (x86, x64, ia64)





얘도 뭐... 3G 이긴 한데...


만약 setuptools 패키지 버전이 설치 요건보다 낮다면, 호환성 향상을 위해 setuptools 를 업그레이드 해야 한다.


> pip install --upgrade setuptools
cs


Python... 다른 언어들하고 호환되는 건 너무 좋은데 뭐 이렇게 필요한게 많냐...



반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

_ underscore

Programming/Python 2020. 11. 16. 21:31
반응형

파이썬에서 언더스코어(_)의 기능은 조금 특별하다. 언패킹에서의 예제에서 홀로 쓰여있는 언더스코어를 보고 조금 더 검색해 봤는데, 함수나 변수에 언더스코어를 사용하여 private 처럼 설정이 가능하다는 것이 새롭다. 참고로 파이썬에서는 C++ 이나 JAVA 처럼 private/protected/public 등의 키워드를 사용하여 리소스 접근 제어를 완벽하게 지원하지 않지만 언더스코어를 사용하여 효과적으로 사용할 수 있다.



언더스코어(_)의 기능


1. 인터프리터에서 마지막 표현식의 값을 불러올 때


>>> 20 
20 
>>> _ + 3 
23
cs



2. 자리는 채워야 하지만 그 값을 무시해도 상관없을 때


# unpacking
x, _, y = (123)
 
# index
for _ in range(10):
    do_something()
 
for _, val in list_of_tuple:
    do_something()
cs



3. 변수나 함수 선언시 사용


파이썬에서 변수나 함수를 private 으로 지정하는 방법으로 언더스코어(_) 를 사용할 수 있다.

변수나 함수 선언시 이름 앞에 언더스코어(_)를 붙이면 private 로 지정되어, 모듈을 from import 할 때 private 변수나 함수들은 import 되지 않을 것이며, __all__ 에 지정되어 있으면 다른 모듈에서 직접 호출할 수 있다.


이름 앞에 싱글 언더스코어(_single_leading_underscore)

- 해당 변수나 함수를 가진 모듈을 from class_file import * 로 호출하면, import 때 무시되어 사용할 수 없다.

- 모듈 내부에서만 사용가능한 private 역할로 사용할 수 있지만, import 로 직접 호출하면 사용 가능하다.


이름 뒤에 싱글 언더스코어(single_trailing_underscore_) : protected

- 내장함수 및 예약어 등의 이름을 사용하고 싶을때 충돌을 방지하기 위해 사용한다.


이름 앞에 더블 언더스코어(__double_leading_underscore) : private

- 인터프리터에서 파싱할 때 그 이름을 그대로 사용하지 않고 내부 규칙에 의해 임의의 이름이 붙여짐(mangle).

- 파이썬에서의 맹글링은 _ClassName__method 가 된다.

- 기존 이름에 직접 접근할 수 없으므로, 주로 클래스 내부에서만 사용한다.


이름 앞뒤에 더블 언더스코어(__double_leading_and_trailing_underscore__)

- __init__ 같은 매직 메소드를 표현할 때 사용한다.

- 사용자 정의도 가능하지만 거의 사용하지 않는다.



4. 숫자 리터럴(Numeric Literals) 에서의 가독성


숫자를 구분하며 가독성을 높일 때(실제값에 영향을 주지 않음)


>>> 1_000_000_000_000_000
1000000000000000
 
>>> 0x_FF_FF_FF_FF
4294967295
cs



5. 국제화(i18n), 지역화(l10n)  함수에 사용


i18n/l10n 라이브러리인 gettext 와 웹프레임워크인 Django 의 공식 문서에서도 언더스코어(_)를 사용하고 있다.


import gettext
 
gettext.bindtextdomain('myapplication''/path/to/my/language/directory')
gettext.textdomain('myapplication')
= gettext.gettext
 
# ...
 
print(_('This is a translatable string.'))
cs


from django.utils.translation import ugettext as _
from django.http import HttpResponse
 
def translate_view(request):
    translated = _('This string will be translated.')
    return HttpResponse(translated)
cs



반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
반응형
v = [x for x in iterable if x]
cs


list 안에다가 for 문을 때려박는 요상한 문법을 보았다. 대충봐도 for 문을 이용해 list 안에 요소를 넣는다는 것은 알겠는데 굳이? 아무래도 한줄에 쓰여 있으니 간략해 보이기도 하지만 제어문이 길어질 경우 가독성은 어째? 간단할 때 쓰면, 아니 복잡하더라도 익숙해지면 나쁘지 않을 것 같다.


저것을 풀어보려니,


v = []
for x in iterable:
    if x:
        v.append(x)
cs


맞나? 이렇게 보니 왠지 한 줄로 써야할 것 같다.



Comprehension


이렇게 list(), dictionary[], set{} 의 요소 자리에 반복문이나 조건문을 사용하여 iterable 한 객체를 생성하는 기능을 Comprehension 이라 한다.

  • List Comprehension (LC)
  • Dict Comprehension (DC)
  • Set Comprehension (SC)


iterable 이란 반복 가능한 자료형을 말하며 collections.Iterable 에 속한 instance 로,

list, tuple, dictionary, set, range bytes, str 등이 있다.


[x * 2 for x in iterable if x] 대충 이러한 형식에서,


첫번재 x 가 요소로 들어갈 변수자리이며 바로 각종 연산이 가능하다.

그 뒤에 for 문과 if/else 문을 중첩으로 사용하여 조금 복잡한 연산도 가능하지만... 그냥 복잡해 보이기만 함 ㅋㅋ


예를 들면 요롷게 긴~


[(x, y, z) for x in range(1, 30) for y in range(x, 30) for z in range(y, 30) if x**2 + y**2 == z**2]



반응형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret