오늘
목표
Browser에 존재하는 stringify 함수를 직접 구현해 봅니다.
stringify 함수는 input 값을 JSON 형식으로 변환.
stringify는 아래와 같이 작동.
Boolean이 input으로 주어졌을 경우
stringify(true); // "true"
String이 input으로 주어졌을 경우
stringify("foo"); // "foo"
null이 주어졌을 경우
stringify(null) // "null"
HashMap이 input으로 주어졌을 경우
HashMap<Object, Object> map = new HashMap<>();
map.put("null", 2);
map.put("true", "false");
stringify(map); // "{"null":2,"true":"false"}"
Map 자료형의 Key는 항상 String으로 저장. null은 입력할 수 없다.
예시에 해당되지 않는 자료형의 경우 모두 null을 반환합니다.
JSON은 무조건 stirng 타입.
input이 String일 경우
if (data instanceof String) {
return "\""+ data +"\"";
} // Object 타입인데도 "\"" + data + "\""; 이 되는 이유는 문자열이기 때문에.
자동 형변환이 되어서.
입력된 값이 Integer일 경우
if (data instanceof Integer) {
return String.valueOf(data);
}
입력된 값이 Boolean일 경우
if (data instanceof Boolean) {
return String.valueOf(data);
}
data + ""; 역시 아까와 마찬가지로 자동 형변환
data.toString()
위 두개는 우리가 변환을 시켜주는게 아니라 맡기는 것이기 때문에 주소값이 나올 수도 있음. ex) HashMap같은거
입력된 값이 Object[]일 경우
if (data instanceof Object[]) {
if (((Object[]) data).length == 0) return "[]";
String str = "";
for(Object o : (Object[]) data) str = str + stringify(o) + ",";
str = str.substring(0, str.length() -1);
return "["+str+"]";
}
<HashMap>
HashMap<Object, Object> map = (HashMap<Object, Object>) data;
HashMap<Object, Object> result = (HashMap<Object, Object>) data; //결과를 담을 해ㅣ맵
// entry set으로 순회가능. 하지만 제일 추천하는 방법은 향상된 for문
// 향상된 for문은 인덱스에 관여 불가능 = 읽기만 가능
// 그냥 for문처럼 인덱스에 관여하게되면 값이 수정될 수 있음. arrayIndexOutOfBound
for(Map.Entry<Object, Object> entry = map.entrySet() {
String key = stringify(
replaceAll().replaceAll() 붙여서 사용가능
하지만 map은 순서를 저장하지 않음. 그래서 에러가 뜸 이걸 막기 위해
Linked HashMap이 있다. 순서 보장해줌.
System.arraycopy
복사할 배열, 몇번째, 어디에복사, 몇번째인덱스부터, 몇개 복사
재귀는 호출이 다끝나고 탈출을 하면 밑에 코드를 실행.
reverserArr();