100 likes | 247 Views
Chpt 11. 문자와 문자열 , 텍스트. overview. 문자 , 문자열은 가장 간단한 자료형 타입들에 대한 정보를 얻을 수 있음 적당히 포맷팅하고 조작하면 편리함 문자열을 효율적으로 이용하기 인코딩과 디코딩 암호 화. 문자. char 16 비트 유니코드 값 숫자랑 문자를 매치시켜놓음 이 관계들을 이용하면 적절한 로직을 만들 수 있음 atoi / itoa (C/C++ 함수 . C# 의 경우 Convert class 가 있음 ). 문자열. String
E N D
Chpt 11 문자와 문자열, 텍스트
overview • 문자, 문자열은 가장 간단한 자료형 • 타입들에 대한 정보를 얻을 수 있음 • 적당히 포맷팅하고 조작하면 편리함 • 문자열을 효율적으로 이용하기 • 인코딩과디코딩 • 암호화
문자 • char • 16비트 유니코드 값 • 숫자랑 문자를 매치시켜놓음 • 이 관계들을 이용하면 적절한 로직을 만들 수 있음 • atoi / itoa (C/C++ 함수. C#의 경우 Convert class가 있음)
문자열 • String • 대부분의 언어에서 기본 타입으로 간주 • 고정된 값 • String s = new String(“Hello, world!”); // 에러 • String s = “!dlrow ,olleH”; // OK • String s = “Hello \n olleH”; • String s = “Hello” + “\n” + “olleH”; • Sealed class
문자열 다루기 • String.Intern/String.IsInterned • 해당 문자열을 해시테이블에 등록 • 해시테이블에 해당 문자열이 있는가? 문자열 반환 : 등록 후 반환 • 문자열을 보관해 두고 계속 불러낼 수 있음 • 어플리케이션 종료때까지 • 모든 문자열을 해시테이블에 저장 • 성능상의 문제가 있을 수 있으므로 비활성화 할수 있음 • 내용이 같은 문자열이라고 같은 레퍼런스를 가지고 있지 않는다! • 하지만 많은 언어들이 모듈의 크기를 줄이기 위해 내부적으로 그러한 동작을 수행 • 언제까지 그따위로 살 텐가?
동적으로 문자열 생성하기 • System.Text.StringBuilder • 편집이 가능한 문자열 객체 • ToString()을 호출하면 정적 문자열로 변신 • 다시 편집을 할 경우 새로운 StringBuilder을 생성 • 때문에 메모리 비효율이 종종 일어남
문자열 다루기- 포맷팅 • System.Object.ToString • Iformattable{string ToString(string format, IFormatProviderformatprovider);} • 문자열을 정해진 규칙에 따라 출력하도록 할 수 있음. • Hex , Dec , Oct , ¥,$,€ • YYYY : MM : DD : hh: mm • 로컬라이징 가능 • 사용자 정의 포맷팅 가능 • 코드를 쓰는 코드도 작성할 수 있음 • http://uguu.org/src_saitou_c.html • 문자열에서 객체 타입 인스턴스를 만들게 할 수 있음 • Public static Int32 Parse(String s, Numberstyle style, IFormatProvider provider)
문자열 다루기- 인코딩/ 디코딩 • 문자열을 비트값들로 만들고 혹은 반대로도 만듬 • 파일에 저장하거나 네트워크로 전송할 때 • 문자열을 바이트 단위로 저장하거나 혹은 그 반대로 푸는 규칙 • UTF-8, UTF-16, ASCII…. • 자물쇠와 열쇠?
문자열 다루기- 인코딩/ 디코딩 • System.Text.Encoding • 메모리 부담을 고려해 객체를 생성한 후 더 이상 새로 만들지 않음 • System.Text.Encoding.GetDecoder • Base-64라는 인코딩도 있음 • System.Convert타입이 제공하는 메소드로도인코딩/디코딩이 가능 <디코딩이 잘못됨> <바이트 밀림>
안전한 문자열 • String에 중요한 정보를 올려놓는다면? • 그리고 이를 메모리에 침투해서 빼간다면? • System.Security.SecureString • 비관리 메모리를 사용하므로 주의 • /unsafe • 어쨌든 읽으려면 관리되는 영역에 올라와야 하므로 • 최대한 빨리 쓰고 빨리 지울것 • String객체로 옮기면 안됨 • 힙 메모리에 String이 남게 됨!