MVVM 패턴 : view 모델이라고도 함.
MVC 패턴의 경우 controller를 모델마다 하나씩 만들잖아?
view 모델은 화면마다 만드는 것. 기준이 화면
view binding : 안드로이드는 jsp처럼 데이터 바인딩이 안된다고 했었음
여길 보면 view에 코드를 바인딩할 수 있다 → view 에 el표현식처럼 적을 수 있음
http 통신할 때 쓰는 것!!
public class Test {
String 통신() { // 데이터를 읽어들이는 로직을 함수로 따로 뺐음 -> 문자열을 리턴하는 함수
URL url;
try {
url = new URL("<http://www.naver.com>");
// conn : naver.com 에 연결된 바이트 스트림 -> 버퍼가 있어야 통신할 수 있어
URLConnection conn = url.openConnection(); // 열어야함.
// conn.getInputStream() : 바이트를 읽음
// new InputStreamReader : 문자열로 읽음
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
return br.readLine(); // 이제 읽어들일건데 해당 페이지에 데이터가 얼마나 있는지 알 수 없으므로 while로 읽어야함
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
String s = 통신(); // 1. 통신을 통해 받은 데이터 s를 onCreate()에 전달해서 그림을 그릴 수 있을까?
// 안드로이드는 main thread 가 동작하면서 onCreate()를 때린다
onCreate(); // -> main thread 가 그림을 그린다
// 2. 메인 스레드는 통신해! 하고 나서 s에 null을 집어넣는다.
// -> cpu가 통신 실행(메모리한테 줌)하고 나서 return 하려고 하니 당연히 null
// 그러고 onCreate 실행됨 -> 데이터 기반으로 그림을 그릴 수 없음
}
}
public static void main(String[] args) throws Exception {
onCreate(); // 2. 그림이 이미 다 그려짐 3. 다 그려지고 통신()함
// 4. 따라서 데이터가 다 안채워져있음 -> 데이터 없이 그림그림
// -> 데이터가 필요한 영역은 엑박이 뜰것이야
// 아까처럼하면? 데이터가 null 일거고....뭐든 의미가 없음
// (또) 따라서 얘네를 ***비동기 통신으로 바꿔줘야함***
String s = 통신(); // 1. 그래서 항상 통신이 onCreate 다음에 온다. 또는 onCreate 가 함수 내부에 있던지
// 안드로이드도 생명주기가 있다. main에서 딱딱 실행을 해줌
}