분류 전체보기 43

[Android][Kotlin] 1. JetPack Compose란?

JetPack Compose JetPack Compose는 안드로이드 앱의 UI를 쉽게 디자인하고 빌드하기 위한 라이브러리이다. Compose가 만들어진 목표는 다음과 같다. 맞춤 레이아웃을 쉽게 작성 고성능 발휘 📌 맞춤 레이아웃을 쉽게 작성 기존 안드로이드에서는 xml로 View를 그려주고, 코드상에서 setContentView나 inflate 메소드를 이용해 해당 View를 로드해야 했다. JetPack Compose를 이용하면 이전과 달리 Compose에서는 코드 상에서 UI에 대한 모든 관리를 하게 된다. 이로 인해 View가 작성되기 쉬워지게 된다. 물론 Binding Library를 사용하면 Parent View를 Binding해놓고 View를 찾는 과정 없이 바로 자식View에 대한 접근이..

App/Android 2022.09.19

[Android][Error] Parcel: unable to marshal value - ArrayList를 Intent에 담아 보내기

이 에러는 Intent에 담긴 list의 직렬화를 해주지 않아서 일어나는 에러이다. 해결 방법 ArrayList 객체를 Intent로 전달하려면 데이터 클래스를 직렬화해야한다. 따라서, 사용하고 있는 데이터 클래스(나의 경우 SafetyInfo)에 Serializable 인터페이스를 아래와 같이 implements해준다. putExtra로 집어넣고, Intent finish_intent = new Intent(getApplicationContext(), MainActivity.class); finish_intent.putExtra("safety_info", mListQR); getExtra할 때, 다음과 같이 한다. ArrayListmListQR = (ArrayList)intent.getSerializa..

App/Android 2022.08.29

[Android][공부기록] Main Thread란?(+ 실습으로 알아보기)

Main Thread란? 안드로이드 어플리케이션이 실행되면 안드로이드 시스템은 ‘하나의 실행 스레드’로 어플리케이션의 프로세스를 실행한다. 어플리케이션의 구성 요소가 생성될 때 별도의 스레드가 생성되는 것은 아니며, 앞서 말한 하나의 실행 스레드에서 실행되는데 이를 Main thread라고 한다. Main Thread가 하는 일? 안드로이드 시스템에 의해 생성된 이 Main thread는 화면 구성에 관한 역할을 담당한다. 예를 들어 Button, CheckBox, TextView 등의 UI도구 키트 구성 요소를 생성/조작하였을 때 상호작용하는 스레드가 Main Thread이다. 그래서 MainThread를 UI Thread라고도 한다. APK의 스레드를 출력해보면 메인스레드 외에도 바인더 스레드와 그 ..

App/Android 2022.08.11

[9장] Item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라

9장. 일반적인 프로그래밍 원칙 기본타입은 간단하고 빠르다. 기본타입, 박싱된 기본 타입을 혼용할 경우, 언박싱 과정에서 NullPointerException을 던질 수 있다. 자바의 데이터 타입은 기본타입(int, double, boolean), 박싱된 기본 타입(Integer, Double, Boolean)이 있다. 는 다음과 같다. 1. 식별성 기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값+식별성을 갖는다. 즉, 박싱된 기본 타입은 참조 타입 변수이기 때문에 Integer i1 = new Integer(1); Integer i2 = new Integer(1); 두 변수 i1, i2가 같은 값 1을 가지고 있더라도 "i1 == i2" 는 false인 것이다. 값이 같아도 서로 다르다고 식별..

Effective Java 2022.07.29

[9장] Item 60. 정확한 답이 필요하다면 float와 double은 피하라

9장. 일반적인 프로그래밍 원칙 float, double 대신 BigDemical이나 int/ long을 사용하라 float과 double타입은 과학, 공학 계산용으로 설계되었다. 이진 부동소수점 연산에 쓰이고, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다. 따라서 정확한 결과가 필요할 때는 사용하면 안 된다. System.out.println(1.03 - 0.42);//0.6100000000001 System.out.println(1.00 - 9*0.10);//0.09999999999999998 위와 같이 doule, float형은 정확한 수치 계산 결과를 내놓을 수 없다. 이를 해결하기 위해서는 BigDemical 또는 int, long을 사용해야 한다. BigDemical의 단..

Effective Java 2022.07.26

[9장] Item 59. 라이브러리를 익히고 사용하라

9장. 일반적인 프로그래밍 원칙 바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면, 누군가 이미 라이브러리 형태로 구현해놓았을 확률이 크다. 1. 표준 라이브러리를 활용하면 그 코드를 작성한 전문가의 지식과, 나보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다. 무작위 정수를 생성하고 싶다고 했을 때, 다음과 같은 코드로 작성하면 3가지 문제점이 발생한다. static Random rnd = new Random(); static int random(){ return Math.abs(rnd.nextInt()) % n ; } 1) n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. 2) n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다...

Effective Java 2022.07.26

[9장] Item 58. 전통적인 for문보다는 for-each문을 사용하라.

9장. 일반적인 프로그래밍 원칙 전통적인 for 문과 비교했을 때 for-each문은 명료하고, 유연하고, 버그를 예방해준다. 성능 저하도 없다. 가능한 모든 곳에서 for문이 아닌 for-each문을 사용하자. for-each문의 정식 이름은 '향상된 for 문(enhanced for statement)'이다. 반복자와 인덱스 변수를 사용하지 않으므로 코드가 깔끔해지고 오류가 날 일이 없다. 하나의 관용구로 컬렉션과 배열을 모두 처리할 수 있어서 어떤 컨테이너를 다루는지는 신경 쓰지 않아도 된다. Iterable 인터페이스를 구현한 객체라면 무엇이든 순회할 수 있다. [향상된 for 문을 사용할 수 없는 상황] 1. 파괴적인 필터링 컬렉션을 순회하며 선택된 원소를 제거해야 한다면 반복자의 remove ..

Effective Java 2022.07.24

[9장] Item 57. 지역변수의 범위를 최소화하라

9장. 일반적인 프로그래밍 원칙 지역변수의 유효 범위를 최소로 줄이면, 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 💡 지역변수의 범위를 줄이는 방법 1. 가장 처음 쓰일 때 선언하기 나 역시 c언어로 프로그래밍을 처음 배우기도 했고, 가장 위에 지역변수를 선언하는 버릇이 있어왔다. 하지만, 사용하려면 멀었는데 미리 선언부터 해 둘 경우 코드가 어수선해져 가독성이 떨어진다. 또한 쓰임을 다 한 뒤에도 여전히 살아 있게 되기 쉽다. 2. 선언과 동시에 초기화하기 초기화에 필요한 정보가 충분하지 않다면, 충분해질 때까지 선언을 미뤄야 한다. (try-catch문은 예외이다. try문 바깥에서도 사용해야 한다면 try 앞에서 선언해야 한다.) 3. 반복문은 while문보다 for문을 사용하는 ..

Effective Java 2022.07.24

[Android][공부기록] MVP, MVVM패턴을 간단히 알아보자

MVP (Model View Presenter) Model Presenter View - 데이터, 비즈니스 로직 - UI에 대한 로직은 가지지 않는다. - DB나 API접근에 대한 처리는 여기에서 해준다. - 모델과 뷰 사이에서 통신한다. - 뷰에서 발생한 이벤트가 프레젠터에 알려지면, 프레젠터는 그 이벤트에 대응하는 처리(모델에 접근)를 한다. - 데이터를 표시한다. View와 Model간 직접 접근하는 일 없이, 그 사이에는 항상 Presenter가 들어간다. 프레젠터는 Model, View의 인스턴스를 직접 참조하지 않고, 인터페이스를 이용해 접근한다. (이렇게 함으로서 테스트 시 Mock Object로 대체할 수 있어 테스트하기 쉽다.) MVP의 장점 - 코드의 관리 효율이 높다. - 액티비티를 ..

App/Android 2022.07.23

[2장] Item 1. 생성자 대신 정적 팩토리 메소드를 고려하라

2장. 객체의 생성과 파괴 정적 팩터리 메서드(static factory method) 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 (예시) boolean의 Boxed class인 Boolean 클래스의 정적 팩토리 메소드이다. public static Boolean valueOf(boolean b){ return b? Boolean.TRUE : Boolean.FALSE; } 클래스는 클라이언트에게 public 생성자 대신 정적 팩토리 메소드를 제공할 수 있다. 장점 1. 이름을 가질 수 있다. public 생성자의 경우, 이름을 따로 가질 수 없다. 하지만 정적 팩토리 메소드는 반환될 객체의 특성을 쉽게 묘사할 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변 클래스:..

Effective Java 2022.07.23