달력

9

« 2019/9 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  
  •  

'.NET'에 해당되는 글 2

  1. 2019.06.16 새로운 Text.Json APIs
  2. 2008.04.05 Automatic Properties
2019.06.16 18:42

새로운 Text.Json APIs 공부하는 것2019.06.16 18:42

며칠전에 VS 2019의 새로운 뉴스 채널에 올라온 기사가 있었다.

새로운 "Try the new System.Text.Json APIs" 라는 제목의 뉴스였는데, 링크를 따라서 들어가면, System.Text.Json APIs라는 블로그의 제목을 마주하게 된다.

 

[.Net Blog]

 

이전에도 "이상하다"라고 생각하기도 하였는데,

왜? .Net에서는 공식적인 라이브러리와 API로 "JSON"을 지원하지 않는가? 라는 질문을 최근까지 해왔었다. 

왜냐하면, Web과 Mobile에서 기본적인 API 통신 프로토콜로는 JSON은 이전의 XML의 위상을 이미 넘어섰기도 하였지만, HttpClient와 같은 라이브러리는 다른 서버로 부터 Data를 받아서 처리하기 위해서 또 다른 라이브러리를 찾아서 설치하여야 하는 불편함이 있었기 때문이다.

물론 JSON.Net 이라는 걸출한 라이브러자가 있기 때문일수 있지만, 이는 MS도 Open 소스화된 표준화된 라이브러리도 아니기 때문에, 매번 Newtonsoft에서 만든 이 라이브러리를 이용할 때마다 드는 생각은 "도대체 무슨 이유 때문일까?" 라는 질문이었다.

 

"Newtonsoft"에서 개발되어서 사용했던 JSon.Net 라이브러리는 이전기 XML 기반으로 Serialize와 Desirialize를 처리해 주던 기능에서 JSON으로 영역을 확대하였다. 

Object와 Array를 잘 처리해 주기도 하였지만, 빠른 속도와 JSON Path 지원과 같은 많은 기는을 제공하는 것이 정점이었고, LINQ에 대한 지원 또한 잘 해 주었다.

 

그런데, 늦었지만 이제라도 .Net Core 3.0에 포함된다고 하니, 다운로드 하는 번거러움은 한가지 줄어들것 같지만, 아직은 .Net Core 3.0 Preview6이기 때문에 공식적인 사용은 조금만 더 기다려야 할 것 같다.

 

새로운 System.Text.Json은 성능적인 면에서 JSON.net과 유사하면, 여지것 잘 사용하여 왔더 "JSon.Net"과의 Dependency를 줄여주는 방향으로 개발이 되고 있다.

 

위 링크에 있는 Blog를 보면, 어떻게 사용하는지에 대한 동영상 가이드와 셈플 코드가 있다

 

가장 기본적인 사용법은 아래와 같이 선언을 하고 Serialization을 사용하면 된다.

using System.Text.Json;
using System.Text.Json.Serialization;

이외의 몇가지 사용예들이 있는데, 아직 정식버전은 아니지만, 거의 바뀌지는 않을 것이다. 참고만 하면 될듯...

 

성능에 대해서도 JSon.Net과도 별 차이가 없다. (아래 참고)

 

JSON deserialization (input)

Description RPS CPU(%) Memory(MB)
Newtonsoft.Json – 500 B 136,435 95 172
System.Text.Json – 500 B 167,861 94 169
Newtonsoft.Json – 2.4 KB 97,137 97 174
System.Text.Json – 2.4 KB 132,026 96 169
Newtonsoft.Json – 40 KB 7,712 88 212
System.Text.Json – 40 KB 16,625 96 193

 

JSON serialization (output)

Description RPS CPU(%) Memory(MB)
Newtonsoft.Json – 500 B 120,273 94 174
System.Text.Json – 500 B 145,631 94 173
Newtonsoft.Json – 8 KB 35,408 98 187
System.Text.Json – 8 KB 56,424 97 184
Newtonsoft.Json – 40 KB 8,416 99 202
System.Text.Json – 40 KB 14,848 98 197

 

새로운 "Text.Json"에 대한 API 문서는 다음을 보면된다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.text.json?view=netcore-3.0

'공부하는 것' 카테고리의 다른 글

새로운 Text.Json APIs  (0) 2019.06.16
요즘 내가 공부하는 것  (0) 2019.06.07
Visual Studio Code 1.0 정식 Released  (2) 2016.04.16
알고리듬 성능비교 - Selection Sort  (0) 2016.02.27
Byte and Bit에 대해서...  (0) 2009.10.20
GRails 공부 자료들...  (0) 2009.10.04
Posted by 행복상자

댓글을 달아 주세요

2008.04.05 11:05

Automatic Properties 좋아하는 것2008.04.05 11:05

자바에서는 getter과 setter을 이용하여 클래스 객체에 상태값을 설정하거나, 상태값을 읽어들인다. 일반적으로 클래스의 멤버 변수를 private로 설정한 후 각각의 값을 getter과 setter로 재 정의 하는 것은 사실 노가다(?) 스러운 작업이라고 스스로 생각을 했었다. 특히 맴버 변수가 5개 이상으로 늘어나면, 이는 정말 코드의 양만 늘이고, 사용에는 별 도움이 안되는 작업을 반복적으로 해야 한다는 사실에 불평을 하곤 했다. 나중에 Eclipse에서 자동으로 생성해주는  Dialog를 무척 고마와 했다.(아래 그림 참조)

Generate Getter and Setter dialog

.Net이나 Visual Basic에서는 getter, setter 대신에 Properties를 사용한다. 물론 getter와 setter 형태로도 만들수 있지만, 사실 이는 다른 메소드와 큰 차이는 없다.
Properties는 마치 변수에 대입하거나, 변수에서 값을 읽는 것과 큰 차이가 없어, 직관적이고 사용하기 편리하다.

하지만, 이를 정의 하기 위해서는 자바의 getter, setter처럼 여러 줄에 걸쳐서 코드를 작성하기 때문에 불편하기는 마찬가지이다. 물론 Visual Basic 6에서는 툴을 이용하여 정의하기도 했지만, 습관적으로 Coyp/Paste 메소드를 이용해서 복사후 수정하는 것이 일반적인 사용법이었다.

Properties는 아래와 같은 형태로 정의하게 된다. Java의 getter,setter과 크게 다르지 않다. 아래의 코드는 C#으로 되어 있어서 Java를 아는 사람도 어렵지 않게 이해할수 있을 것이다.

    public class Person {

       
private string _firstName;
        private string
_lastName;
        private int
_age;
       
        public string
FirstName {

           
get {
               
return _firstName;
           
}
           
set {
                _firstName
= value;
           
}
        }

       
public string LastName {

           
get {
               
return _lastName;
           
}
           
set {
                _lastName
= value;
           
}
        }       
       
       
public int Age {

           
get {
               
return _age;
           
}
           
set {
                _age
= value;
           
}
        }
    }

이를 Automatic Properties로 바꾸면 다음과 같다. 보기 편하고 심플하다. 그리고 Private로 변수를 클래스 내에 선언해서 사용할 필요도 없다. 물로 내부적으로 연산 처리하는 경우는 조금 다를수 있다.

    public class Person {
   
       
public string FirstName {
           
get; set;
       
}

       
public string LastName {
           
get; set;
       
}        
       
       
public int Age {
           
get; set;
       
}
    }

이를 좀더 가독성 있도록 쓰고 사용하려면, 아래와 같이 고쳐서 사용하면 된다.

    public class Person {
       
public string FirstName { get; set; }
       
public string LastName  { get; set; }        
       
public int    Age       { get; set; }
    }


그럼 이것은 뭘 뜻하는 것인지 한번 생각해 보시길... 퀴즈 아닌 퀴즈



The simple is good!




 

Posted by 행복상자

댓글을 달아 주세요