코루틴보통 코루틴을 경량화 스레드라고 자주 표현한다그럼 기존의 스레드는 무엇을 의미할까?기존의 스레드는 보통 OS 혹은 JVM 에서 생성되는 스레드를 의미하고, 이 스레드들은 매우 빠르고, 반응이 좋지만 비용이 크다.각 스레드는 생성, 해제(GC 수집시), 컨텍스트 스위치(스레드 실행 혹은 종료시에 스레드의 상태를 저장하고 복구하는 프로세스가 있다) 시에 CPU 타임과 메모리를 소모하는데, 이 비용이 상대적으로 높기 때문에 JVM 에서 돌아가는 프로그램들은 아주 많은 수의 스레드를 가지기 어렵다. 반면에 코루틴은 값을 반환할 수 있고 일시 중지(pause) 및 복귀(resume)할 수 있는 경량화된 스레드(정확하게 스레드는 아니고 함수이며, 비동기를 풀어나가는 코딩스타일중 하나고 그것에 초점을 맞춰 나온..
TL; DR무공변성(invariant) - 자기 자신 타입만 허용공변성(covariant) - out 키워드를 사용하며 자기 자신과 하위 타입만 허용반공변성(contravariant) - in 키워드를 사용하며, 자기 자신과 상위 타입만 허용 무공변성(Invariant)상속 관계에 상관 없이, 자기 타입만 허용합니다공변성(Covariant)리스코프 치환법칙을 허용한다는 의미로 자기 타입과 그 하위 타입을 허용합니다(S 클래스가 T 클래스의 자식이라면 프로그램에서 S 의 객체는 프로그램의 속성을 변경하지 않고, T 의 객체로 교체할 수 있다) 최소한 자식클래스가 부모클래스의 행위를 모두 만족해야한다는 의미이고 즉 업캐스팅만 해라! 의미이다11번째 코드라인에 out 키워드가 사용되었습니다 반공변성(Contr..
List A와 List B에서 같은 객체가 존재하는지 어떤 방식으로 비교 할 수 있을까? premitive 타입이라면 그저 Contains 메소드를 사용하여 비교하면 되겠지만,Reference 타입이라면 T class에서 equals 메소드를 오버라이드해서 사용하면 된다. 예시 )ExContentsVO클래스의 mExId는 유니크한 아이디 값을 가지게 되어있다.public class ExContentsVO { private int mResId; private int mExId; private String mExName; private int mExTime; private int mRestTime; private boolean mChecked; public int getResId() { return mRes..
콜백의 정의는 호출자가 피호출자를 호출하는 것이 아니라피호출자가 호출자를 호출하는 것을 말한다. 콜백의 장점은 어떤 특정 조건이 만족 되었을 때 지정한 기능을 수행할수 있어 비동기로 효율적으로 기능을 수행할 수 있습니다.(안드로이드에서 워낙 많이 사용해본 기억.) 일단 구현해보자! 저만의 방식으로 구현해봤습니다. 언제나 날카로운 지적 부탁드립니다. package algo;public class callback implements CallBackInterface { public void test(){ TestClass testClass = new TestClass(); testClass.setCallBack(this); testClass.callWork(); } @Override public void ca..
자바 객체를 비교할때 equals 뿐만 아니라 hashode도 오버라이드 해줘야 하는 이유 public class Student { private int student_id; private String name; private String major; public int getStudent_id() { return student_id; } public void setStudent_id(int student_id) { this.student_id = student_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMajor() { return m..