자바 개발자라면 필독서인 이펙티브 자바.. "하루에 1-2챕터씩 일주일만에 끝내야지"라고 호기롭게 책을 빌려왔는데.. 힝 어렵다😥😥 티끌모아 태산이라고 90개의 아이템을 하루에 적어도 1개씩 정리하는 걸로.. 1️⃣ 생성자 대신 정적 팩터리 메서드를 고려하라. 🔎 일단, 정적 팩터리 메서드가 뭔데? Static factory method, 해당 클래스의 인스턴스를 반환하는 단순한 static 메서드 public class Boolean { public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); private final boolean value; // public 생..
✔️ 코틀린은 필요할 때 암시적으로 박싱 수행 ✔️ 모든 코틀린 타입은 근본적으로 어떤 클래스 정의를 기반으로 만들어짐 (메서드와 프로퍼티 제공!) 💡 박싱(Boxing)이 궁금하다면? https://ktko.tistory.com/entry/%EC%9E%90%EB%B0%94-%EB%B0%95%EC%8B%B1boxing%EA%B3%BC-%EC%96%B8%EB%B0%95%EC%8B%B1unboxing 1️⃣ 정수 타입 ✔️ Byte - 1byte (= 8bit) - 범위 : -128(-2^7) ... 127(2^7-1) ✔️ Short - 2byte - 범위 : -32768(-2^15) ... 32767(2^15-1) ✔️ Int - 4byte - 범위 : -2^31 ... 2^31-1 ✔️ Long - 8..
전공 공부 접은지 1달째..! 더도 말고 덜도 말고 코틀린 공부만 열심히 해보려 한다! 아자아자🔥 1️⃣ 주석 // 한 줄 주석 /* 여러 줄 주석 */ /** KDoc 여러 줄 주석 */ 2️⃣ 변수 // 불변 변수 val(value) val a = 15 val b = readLine()!!.toInt() val c = "Hello" val d: Int = 100 val text: String text = "Hello" // 가변 변수 var var sum = 1 ❗ 처음 변수에 값을 대입할 때 추론된 타입은 항상 유지 (가변, 불변 모두) ❗ 코틀린에서 = 은 statement이기 때문에 a = b = c 형태 불가능 🔍 세미콜론(;)을 쓰지 않는 스타일 권장 🔍 readLine() : 표준 입력에서..
# 네트워킹? : 인터넷에 연결되어 있는 원격지의 서버 또는 원격지의 단말과 통신해서 데이터를 주고받는 동작 💡 네트워킹을 통해 인터넷에 연결되어 있는 여러 단말을 동시에 사용할 수 있어 다양한 데이터 자원을 효율적으로 사용가능! # 네트워크 연결 방식 ✔ 가장 단순한 네트워크 연결 방식은 클라이언트와 서버가 일대일로 연결하는 '2-tier Client/Server' 방식 (ex. HTTP 프로토콜, FTP 프로토콜, POP3 프로토콜...) ✔ 서버를 더 유연하게 구성하고 싶을 때는 '3-tier' 연결방식 사용(서버를 응용서버와 데이터 서버로 구성) ✔ 단말 간 통신은 서버를 두지 않고 단말끼리 서버와 클라이언트 역할을 하는 'Peer-to-Peer' 연결 방식 사용 # 소켓 : 컴퓨터 네트워크를 경..
# 스레드(thread)? : 동시에 수행이 가능한 작업 단위 : 하나의 프로세스 안에서 동시에 수행되어야 하는 작업을 위해 사용 ✔ 같은 프로세스 안에 들어 있으면서 메모리 리소스를 공유 (효율적) ✔ 동시에 리소스에 접근할 때 데드락(DeadLock)이 발생할 수 있음 → 작업을 순서대로 처리하게 도와주는 핸들러로 해결 ✔ 안드로이드에서 UI 처리할 때 사용되는 기본 스레드를 '메인 스레드'라고 부름 💡 같은 프로세스 안에서 일련의 기능이 순서대로 실행될 때 대부분 큰 문제가 없지만, 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 발생! → 해결책은 서비스 또는 멀티 스레드! # 핸들러(Handler)? : 메시지 큐로 메인 스레드에서..
# 스피너? ✔ 윈도우에서 콤보박스로 불림 ✔ 스피너 객체도 선택 위젯 : 스피너를 누르면 그 아래쪽에 작은 창이 나타나고 그 안에 들어있는 여러 데이터 중의 하나를 선택할 수 있음 # 스피너를 구현해보자! 1) 원하는 액티비티 XML 파일에 스피너 추가 2) 자바소스 파일 수정 // MainActivity.java public class MainActivity extends AppCompatActivity { TextView textView; String[] items = {"mike", "angel", "crow", "john", "ginnie", "sally", "cohen", "rice"}; //스피너 아이템으로 보일 문자열 데이터들의 배열 @Override protected void onCrea..
# 리싸이클러뷰는 언제 쓸까? : 리스트(선택 위젯) UI를 사용하고 싶을 때 💡 손가락을 사용하는 스마트폰은 작은 크기의 셀을 터치하기 힘들기 때문에 리스트 모양으로 큼직하게 만드는 것이 사용성을 높이는 대표적인 방법이다! # 선택 위젯(리스트)? ✔ 어댑터(Adapter) 패턴을 사용 : 원본 데이터를 뷰에 직접 설정하지 않고 어댑터라는 클래스를 사용! : 어댑터가 데이터 관리 + 각 아이템의 뷰 생성 → 따라서, 어댑터에 원본 데이터를 설정 + 어댑터가 아이템을 위한 뷰를 위젯에 전달! # 리싸이클러뷰 ✔ 상하 스크롤, 좌우 스크롤 모두 가능 ✔ 메모리를 효율적으로 사용하도록 캐시(Cache) 매커니즘 구현 → 어댑터에 아이템이 100개 있어도 100개의 뷰 객체를 만들지 않음, 뷰 객체를 재사용!..
버튼 뿐만이 아니라 레이아웃도 커스텀 가능! 버튼은 클래스만 있어도 됐지만 레이아웃은 이름에 걸맞게 xml 레이아웃 파일 + java소스파일이 모두 필요! # 레이아웃을 커스텀해보자! 흔히 볼 수 있는 카드형 UI를 만들어보자 1) 커스텀할 레이아웃 xml 파일 만들기! ... 2) xml레이아웃과 매칭될 클래스 파일 만들기 public class Layout1 extends LinearLayout { //xml파일의 최상위 레이아웃 상속 ImageView imageView; TextView textView; TextView textView2; public Layout1(Context context) { //소스코드에서 new연산자로 Layout1을 생성했을 때 호출 super(context); init..