JavaScript에서, 참 같은 값(Truthy)인 값이란 Boolean을 기대하는 문맥에서 true로 평가되는 값입니다. 따로 거짓 같은 값으로 정의된 값이 아니면 모두 참 같은 값으로 평가됩니다. (예: false, 0, -0, 0n, "", null, undefined와 NaN 등)
JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환합니다. 선택적으로, replacer를 함수로 전달할 경우 변환 전 값을 변형할 수 있고, 배열로 전달할 경우 지정한 속성만 결과에 포함합니다.
var member = { id: 1, username: "dragon", password: 111 };
var json = JSON.stringify(member);//JSON.stringify(member); -> 문자열로 자동으로 변환해줌
console.log(json);
자바에서는 생성된 자료형식으로 Object를 만들고, 담고 빼줄때 사용자가 원하는 형식으로 형변환을 해준다.
Object가 들어오고, 나갈때 사용자가 원하는 어떠한 형식으로 바꿔주는 것을 Generic이라고 한다.
GList<String,Integer> list = new GList<String,Integer>();
반드시 Object로 변환이 가능한 Wrapper형식으로 적어줘야한다. [int (x) / Integer (o)]
public class GList<타입, 두번째타입>
public class GList<T>//상징적으로 <T>를 많이 씀
예시 코드
package com.newlecture.app.util;
public class Program {
public static void main(String[] args) {
GList<Integer> list = new GList<>();
list.add(3);
list.add(5);
int size = list.size();
System.out.printf("size : %d\n",size);
list.clear();
size = list.size();
System.out.printf("size : %d\n",size);
list.add(7);
int num = (Integer) list.get(0); //Object -> Integer
System.out.printf("num : %d\n",num);
//num= (Integer)list.get(1);
}
}
package com.newlecture.app.util;
public class GList<T> {
private Object[] nums;
private int current;
public GList(){
nums = new Object[3];
current =0;
}
public void add(T num) {
nums[current]=num;
current++;
}
public void clear() {
// for(int i=0;i<current;i++)
// nums[i]=0;
//nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public T get(int index) {
if(current<=index)
throw new IndexOutOfBoundsException();
return (T)nums[index];
}
}
🟩 가변크기 컬렉션으로 변경하기
package com.newlecture.app.util;
public class Program {
public static void main(String[] args) {
GList<Integer> list = new GList<>();
list.add(3);
list.add(5);
int size = list.size();
System.out.printf("size : %d\n",size);
list.clear();
size = list.size();
System.out.printf("size : %d\n",size);
list.add(7);
int num = (Integer) list.get(0); //Object -> Integer
System.out.printf("num : %d\n",num);
//num= (Integer)list.get(1);
}
}
package com.newlecture.app.util;
public class GList<T> {
private Object[] nums;
private int current;
private int capacity;//용량
private int amount;//추가 증가량
public GList() {
current = 0;
capacity = 3;
amount = 5;
nums = new Object[capacity];
}
public void add(T num) {
//만약에 공간이 모자라면
if (capacity <= current) {
Object[] temp = new Object[capacity + current];
for(int i =0;i<current;i++)
temp[i]=nums[i];
nums = temp;
capacity+=amount;
}
nums[current] = num;
current++;
}
public void clear() {
// for(int i=0;i<current;i++)
// nums[i]=0;
//nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public T get(int index) {
if (current <= index)
throw new IndexOutOfBoundsException();
return (T) nums[index];
}
}
🟩 자바 컬렉션의 3대 계보 (Set/List/Map)
List<Integer> list = new ArrayList<>();
list.add(3);//Index 0
list.add(5);//Index 1
list.add(7);//Index 2
list.add(8);//Index 3
list.get(2);// 7이라는 값이 나온다.
System.out.println(list.get(2));
System.out.println(list.size());
// ----------------------------------------------
//중복제거할때 유용하게 사용한다.
Set<Integer> set = new HashSet<>();
set.add(3);
set.add(5);
set.add(6);
set.add(7);
set.add(7);
set.add(7);
System.out.println(set.add(7));
System.out.println(set.add(8));
System.out.println(set.size());
// ---------------------------------------------
Map<String, Object> map = new HashMap<>();
map.put("id", 3);
map.put("title", "Hello");
map.put("hit", 12);
System.out.println(map.get("title"));
package com.newlecture.app.util;
public class Program {
public static void main(String[] args) {
IntList list = new IntList();
list.add(3);
list.add(5);
int size = list.size();
System.out.printf("size : %d\n",size);
list.clear();
size = list.size();
System.out.printf("size : %d\n",size);
list.add(7);
int num = list.get(0);
System.out.printf("num : %d\n",num);
}
}
package com.newlecture.app.util;
public class IntList {
private int[] nums;
private int current;
public IntList(){
nums = new int[3];
current =0;
}
public void add(int num) {
nums[current]=num;
current++;
}
public void clear() {
// for(int i=0;i<current;i++)
// nums[i]=0;
//nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public int get(int index) {
if(current<=index)
throw new IndexOutOfBoundsException();
return nums[index];
}
}
📌 우리가 정수형 컬렉션을 만들면 정수형만 담을 수 있다.
Exam이라는 객체를 관리하고 싶으면 Exam 방식이 필요하다.
문자형을 관리하고 싶으면 문자형 방식이 필요하다.
실수라는 객체를 관리하고 싶으면 실수형 방식이 필요하다.
✏️ 일괄적으로 한 번에 관리하고 싶은데 이런 방법이 있을까???
💡 있음 💡
자바에서 모든 클래스는 Object라는 녀석을 상속받게 돼있다.
어떠한 클래스도 Object라는 부모를 가진다면 모든 객체는 Object라는 단일화된 형식으로 참조할 수 있다.
👇 👇 👇 👇 👇
그러나!
기본형식(Primitive)으로 사용하는 값들(int, float, double.... 등등)은 참조할 수 없다.
기본 형식은 값은 담는 것이다.
👇 👇
이 문제를 해결하기 위해 JDK5.0부터 새로운 것이 등장했다.(Auto Boxing/ UnBoxing)
🟩 Wrapper 클래스와 Auto Boxing/ UnBoxing
Object라는 자료형이 있다.
형식 자체는 참조형이어서 객체 자체는 참조할 수 있지만, 값은 담는 것이어서 참조할 수 없다.
" 3 " 이라는 녀석 (Primitive)이 참조가 되려면 공간으로 바뀌어야 하는데, 공간이 되도록 감싸는 것이 필요하다.
이것을 Boxing이라고 한다.
이렇게 Boxing 한 값은 객체여서 나중에 쓰려면 다시 기본형식(Primitive)으로 바꿔 주어야 한다.
이것을 UnBoxing이라고 한다.
이렇게 Boxing에 사용되는 것을 Wrapper 클래스라고 한다.
👇👇
String은 참조형이어서 바로 참조가 가능하다.
이제 값을 이용할 수 있는 변수 형식이 2가지(값형식, 참조형식)가 생긴다.
👇👇
동작하는 것이 같다고 "Integer"로만 사용하게 되면, 내부적으로 Boxing, UnBoxing이 연산이 자꾸 일어나
위 링크는 수업 초기에 선생님께서 "정수갑옷"이라는 표현을 사용해서 설명해 주신 게... 이제 와서 보니 Wrapper Class에
관한 설명이었다! 지금 너무 속이 후련해서 행복하다! 뉴레카! 유레카! 유렉쌤짱!
🟩 Object 컬렉션으로 변경하기
package com.newlecture.app.util;
public class Program {
public static void main(String[] args) {
ObjectList list = new ObjectList();
list.add(3);
list.add(5);
int size = list.size();
System.out.printf("size : %d\n",size);
list.clear();
size = list.size();
System.out.printf("size : %d\n",size);
list.add(7);
int num = list.get(0); //Integer
System.out.printf("num : %d\n",num);
num= list.get(1);
}
}
package com.newlecture.app.util;
public class ObjectList {
private Object[] nums;
private int current;
public ObjectList(){
nums = new Object[3];
current =0;
}
public void add(Object num) {
nums[current]=num;
current++;
}
public void clear() {
// for(int i=0;i<current;i++)
// nums[i]=0;
//nums = new int[3];
current = 0;
}
public int size() {
return current;
}
public Object get(int index) {
if(current<=index)
throw new IndexOutOfBoundsException();
return nums[index];
}
}