String은 생성된 방법에 의해서 Class에서 상속이 되는지 new연산자로 객체가 생성이 되는지 다르다.
String이 불변객체라는 의미는 한번 만들고는 변하지 않는 값이라는 의미이다. 즉, 상수라는 것이다.
String은 ="";으로 생성할 수 있다. 그렇게 생성하면 이것은 new라는 연산자로 객체가 생성된 것이 아닌 class 변수로 상수들이 모여있는 상수풀이라는 저장공간에 Student라는 객체가 생긴다. 그리고 equals가 객체의 내부의 단어를 비교한 동등성의 법칙처럼 같은 단어가 존재하면 Student객체를 따로 생성하지 않고 참조변수를 ConstantPool 주소값에 연결한다.
class는 변수, 생성자, 메소드가 존재한다.
String Class는 메소드가 많이 존재한다.
문자열의 내용을 비교하고, 동등성 여부를 반환한다. (ex) 구글의 사람이 맞으신가요?)
Data를 주고 받을 때 일반적으로 text데이터를 주고 받는다 . Stirng으로 표현이 가능하다.
리터럴
프로그램에서 상수값을 표현하는 방법
String class로 만드는 문자열
한번 만들어진 문자열은 변경할 수 없다. = 상수이다.
new연산자를 이용하여 String 객체를 만들지 않는다.
String class로 만들게 되면 상수풀(Constant Pool- 상수들이 모여있는 곳)에 String 글자가 생성된다.
같은 글자일 경우 객체를 상수풀에서 1개로 만들어서 같이 사용한다. 즉, 같은 객체 이다.
같은 객체이며, 해쉬코드의 값이 동일하다.
String문자열 값으로 해쉬코드의 값을 만들어 낸다.
비교연산자는 다르지만 (동일성 비교)
equals는 내용을 비교하기 때문에 *(동등성 비교) 실행 결과는 동일하게 나온다.
메소드 (반환타입이 있는 경우 꼭 앞에 같은 타입을 담을 참조 변수를 입력해주자)
String class는 new생성자를 입력하지 않는다. 이미 네트워크 값에 String(byte[] byte) , String(char[] value) 처럼 이렇게 담겨와 있기 때문에 생성자로 변환이 되서 출력된다.
Parse 1.원래값을 알아내다. 2. text데이터로부터 해석해서 객체를 생성한다라는 두가지 의미를 가지고 있다.
범용적인 의미로 사용된다.
기본자료형과 문자열간의 데이터 변환
기본자료형을 문자열로 변환하기
String 문자열 = String.valueOf("1234");
String 문자열 = String.valueOf("100000000000");
String 문자열 = String.valueOf(true);
String 문자열 = String.valueOf('A');
문자열을 기본자료형값으로 변환하기// 전부 java.lang에 존재하는 클래스이다.
int 정수 = Integer.parseInt("1234");
long 정수 = Long.parseLong("1000000000000000");
double 실수 = Double.parseDouble("3.141592");//많이 사용된다.
boolean 논리값 = Boolean.parseBoolean("true");
char은 잘 사용하지 않는다.
정규표현식
\,^,$,*,+,? 표현식이 존재한다.
다양한 표현식이 존재하고 있다.
글자 하나의 추출 : /대 / -->1개만 출력된다.
특정 단어를 갖고 있는 경우 전부 출력한다 /대/g -->대라는 문자가 들어간 문자열을 전부 찾는다.
/[대a0]/ []란 or역활을 가지고 있다. 대, a, 0도 찾는다.
/[^0~9]/ ^란 not의 의미를 가지고 있다.
패턴을 적용해서 해당되는 패턴을 찾는 것이다.
활용하면 text내에서 내가 원하는 text를 빠르게 찾고 변경할 수 있다.
프로그래밍언어는 전체적으로 지원하고 있다.
수량을 입력할 때 ,숫자를 작성하고
id를 입력했을 때 , 전화번호, 카드번호 등 영어와 대소문자, 지정된 특수문자로 작성이 되어있는지 확인해야한다.
패턴화 했기 때문에 patten에 맞에 입력했는지 확인해야한다. patton에 따른 유효성체크시에도 확인한다.
인터넷에 공개되어있고, 손에잡히는 정규표현식이라는 책도 추천한다.
java에서는 정규표현식을 즐겨사용하지 않기 때문에 많이 어렵게 되어있다.
java web상에서는 많이 사용된다. MDN web Docs에서 표현기술들을 확인하는 편이 좋다.
Stackoverflow사이트를 이용하여, 오류가 났을 때 어떤 것이고, 해결을 어떻게 해야하는지 확인하는 것도 좋다.
TextData의 유형(텍스트 데이터)
pain text
일반적으로 사용하는 text이다.
"안녕하세요","반갑습니다.","비밀번호가 일치하지 않습니다.","서버에서 알수 없는 오류가 발생하였습니다."
CSV text(comma seperate vlaue)
"김유신,이순신,강감찬" , "01,서울시,2021,0930,100.2"
comma , 을 기준으로 값이 나눠지는 것이다.
공공데이터 포탈 site에서 CSV로 다운 받으면 엑셀에서 바로 표를 획득할 수 있다.
XML
다목적 마크업 문서이다.
W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록, 권장하는 다목적 마크업 문서이다.
다른 많은 종류의 데이터를 기술하는데 사용할 수 있다.
<book>
<title>이것이 자바다</title>
<writer>신용형</writer>
<publisher>한빛미디어</publisher>
<pubdate>2017-04-09</pubdate>
<price>35,000원</price>
</book>
한눈에 봐도 어떤 데이터인지 추축이 가능하다.
data가 뭔지 표현하는 것이 메타데이터, 부가적인 정보라고한다.
그런데 이런 데이터는 실제 데이터는 20글자,부가적인 정보의 경우 125글자이다. 주고받는 데이터가 많아지고, 확인할 데이터가 너무 많아 졌기 때문에 추출하기 어려워 대체제가 필요해졌다.
JSON text
속성-값 쌍, 키-값 쌍으로 이뤄진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/ 서버통신(AJAX)을 위해, XML을 대체하는 주요 데이터 포맷이다.
XML을 대체제로 나온것이 JSON문서이다.
영화진흥위원회사이트에 open API문서를 확인하면 키와 값 쌍으로 이뤄져 있다.
[{"ranking" : 1 , "title" : "007노타임투다이","open Date : "2021-09-29"}]이렇게 기본키 값으로 설정한 값과 그거에 맞는 값의 형태를 가지고 있다. 키-값 쌍, 속성과 값 속성-값쌍으로 쉽게 데이터를 이해하고 확인할 수 있다.
XML과 JSON의 경우 라이브러리가 존재한다. GSON이라는 google에서 만든 라이브러리가 존재한다.
CSV텍스트를 자바객체로 자바객체에서 CSV텍스트
XML텍스트 자바객체 , 자바객체에서 XML텍스트
JSON텍스트 자바객체, 자바객체에서 XML텍스트로 변경할 수 있다.
그렇다면 왜 객체자체를 주면 안될까??
기상청에서 날씨자료를 획들할 때 공항, 방송사, 군대 , 어업등을 통해 자료를 얻는다.
기상청에서는 java를 사용한다고 하지만, 공항, 방송사, 군대, 어업의 경우 java를 사용한다는 보장도 없고, 어떤 시스템으로 만드는지는 모른다(c언어, python을 사용할 수 있다.)
그렇기 때문에 제일 좋은 방법은 text를 받는 것이다. 모든 프로그래밍언어는 text를 인식하고, 이해하기 좋은 파일로 주는 것이 좋기 때문에