gyu__b (90) 썸네일형 리스트형 ListView vs RecyclerView ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ ListView의 문제점 1. ViewHolder Pattern 을 강요하지 않는다. ListView는 이름에서도 알 수 있듯이 리스트 즉, 목록을 구현하는데 사용된다. ListView는 안드로이드에 임베디드 되어 있는 코드로 동작하며, API level 1부터 존재했다. 위의 형태는 가장 일반적인 ListView의 getView() 접근 방법이다. 하지만 위와 같이 동작하게 되면 getView() 즉, ListView의 재사용성이 떨어지게 된다. @Override public View getView(final int position, View convertView, ViewGroup parent) { Holder holder = n.. Lambda식이란 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ Lambda 식이란 Lambda 는 함수에 대한 이론적 기반을 세우는 수학적 추상화를 뜻하고 이것을 프로그래밍에 녹여서 표현한 것이 Lambda 표현식이다. 프로그래밍에서 Lambda 에 근간을 두어 설계한 패러다임이 함수형 프로그래밍이다. 함수형 프로그래밍은 함수의 입력만을 의존하여 출력을 만드는 프로그래밍 패러다임이다. 함수 개념에 근간을 두어 설계하였기에 다음과 같은 특징을 가진다. 함수를 객체로 사용함으로써 값으로 할당하거나 파라미터로 전달이 가능하다. (고계함수) 함수를 불변상태로 규정하여 부작용을 최소화하고 멀티 스레드 환경에서 동기성 문제에 안전하다. (순수함수) 코드를 간결하게 하여 가독성을 높임으로써 로직에 집중시킨다.. Java 메모리 구조 Heap, Data, Stack Java 메모리구조 Heap, Data, Stack Java 는 Java 코드를 컴파일러를 통해 바이트코드로 변환시킨 뒤 JVM 위에 실행시키는 구조 JVM은 자바 바이트코드를 실행시키는 가상머신으로서 자바가 플랫폼에 독립적으로 실행될 수 있게 한다. JVM 구조에는 Class Loader, Execution Engine, Garbage Collector, Runtime Data Areas 가 있다. Class Loader 컴파일러에 의해 바이트코드로 변환된 코드를 Runtime Data Areas 에 클래스 단위로 로드 -> Link 를 통해 적절히 배치시키는 작업 Class Loader 로 인해 동적으로 클래스를 로드할 수 있다. Execution Engine Runtime Data Areas 에 배.. 제네릭 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ 제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법. 제네릭을 사용하는 이유는 확장성과 타입 안전성 때문. 기능을 구현할 때 제네릭을 사용하면 다양한 자료형에 적용이 가능하여 확장성을 보장할 수 있다. 이러한 특징은 Object를 통해서도 보장이 가능하지만 Object는 타입에 대한 검사가 이뤄지지 않기 때문에 컴파일 타임에 문제를 인지할 수 없다. 따라서 잘못된 타입이 적용되었을 경우 에러를 잡기가 힘들다. 반면 제네릭은 사용하고자하는 자료형을 명시적으로 표시함으로써 잘못된 자료형을 컴파일 타임에 찾을 수 있다. 비록 제네릭은 생략될 수 있기 때문에 명시적인 자료형 선언 없이도 사용이 가능하여 타입 안전성이 무너.. Iterator ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ Iterator란? Iterator는 내부 구현에 대한 이해 없이 데이터를 순차적으로 탐색할 수 있도록 지원하는 인터페이스이다. 데이터의 내부 구조를 모르더라도 next() 메서드를 통해 순차 탐색이 가능하다. LinkedList, HashMap을 구성하는 구체적인 자료구조(Node 나 Entry)를 모르더라도 Iterator를 사용하면 원하는 정보를 가져올 수 있다. 따라서 내부 구조를 숨길 수 있어 정보은닉이 보장되고 Iterator 인터페이스를 각 자료구조에 맞게 오버라이딩함으로써 다형성을 보장한다. erinyees.tistory.com/21 Vector vs ArrayList vs LinkedList Vector Vector는 배열의 동적인 사용을 위해 제공되는 클래스 내부적으로 synchronized를 통해 구현되어 있기 때문에 동기화를 보장. ArrayList와 LinkedList는 List 인터페이스를 구현한 Collection 구현체이다. List 인터페이스는 기본생성시 동기화를 보장하지 않지만 동기화가 필요한 환경에서는 Collections 클래스를 통해 동기화를 보장할 수 있음. Collection.synchronizedList(List list); 동기화란? 자바에서 동기화란 여러 개의 스레드가 한 개의 자원을 사용하고자 할 때 해당 스레드만 제외하고 나머지는 접근을 못하도록 막는 것. ArrayList 내부적으로 데이터를 배열에서 관리하며 추가, 삭제 시 임시 배열을 생성하여 데이터를 .. String Literal ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ String Literal //1 String s1 = "abc" //2 String s2 = new String("abc") literal은 쌍따옴표 안의 문자열을 말함. 위 예제 1번처럼 literal을 통해 String 객체가 생성. 2번과 같이 new 연산자를 통해 생성하는 String 객체와는 내부적으로 다름. 자바에서 객체 생성 시 객체를 참조하는 변수(s2)는 Stack 메모리, 객체는 Heap 메모리에 저장이 된다. 하지만 literal을 통해 생성된 String 객체는 Heap 메모리에 저장 되는 것이 아닌, 별도의 공간인 String Constant Pool(상수풀)에 저장이 된다. String Constant Po.. Activity LifeCycle ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ View가 그려지는 과정 Activity LifeCycle onCreate() 액티비티가 처음 생성될 때 호출 onRestart() 액티비티가 중단 되었다가 다시 시작되기 직전에 호출 onStart() 액티비티가 사용자에게 보여지기 직전에 호출. 액티비티가 foreground로 나오면 onResume()이 따라오고, 액티비티가 숨겨지면 onStop()이 호출. onResume() 액티비티가 화면에 보여지고 사용자와 상호작용하기 직전에 호출. 이 시점에 액티비티는 액티비티 스택 최상단에 위치. onPause() 다른 액티비티로 넘어가거나, 뒤로 가기를 누르거나, 홈으로 돌아가는 등 현재 액티비티가 사라지기 직전에 호출. 데이터를 유지하.. 이전 1 2 3 4 5 6 7 ··· 12 다음