본문 바로가기

전체 글71

[ Java ] 인터페이스(interface)의 핵심 이해: 주요 특징과 사용 예시 public interface ItemTouchHelperExListener { void onItemMoveCompleted(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder); } 인터페이스는 자바에서 매우 중요한 개념 중 하나로서, 자바 프로그래밍에서 객체 간의 상호작용을 위한 중요한 수단으로 사용된다. 객체가 어떤 메소드를 가지고 있어야 할 지를 정의 하지만, 이 메소드들이 어떻게 구현되어야 하는 지는 정의하지 않는다. 인터페이스는 오로지 추상 메소드(구현부가 없는 메소드)와 상수만을 멤버로 가질 수 있다. 인터페이스의 주요 특징 1. 추상 메소드 : 인터페이스 내의 모든 메소드는 기본적으로 추상 메소드이다. 즉, 메소드의 선언만 있고 구.. 2024. 4. 1.
[ Tool ] readme.so 활용 가이드: 빠르고 쉽게 전문적인 README.md 작성하기 프로젝트를 마무리하며 README.md 파일 작성은 필수적인 과정이다. 이는 프로젝트의 첫 인상을 결정하는 요소이므로, 프로젝트에 대한 상세한 정보를 잘 정리하여 README에 기록하는 것이 매우 중요하다. 하지만, README 파일은 마크업 언어로 작성되어야 하며, 이로인해 때로는 원하는 대로 자유롭게 표현하기 어려울 수 있다. 이러한 상황에서 추천하는 툴이 바로 readme.so 이다. 이 툴은 사용자 친화적인 인터페이스와 다양한 템플릿을 제공하여, 누구나 쉽게 전문적인 README 파일을 작성할 수 있게 도와준다. 실제로 readme.so를 사용해 본 결과, 이전에 직접 작성했던 README 파일과 비교해 보니 훨씬 적은 노력으로도 품질이 높아진 문서를 만들 수 있었다. 이 경험을 통해 이 툴에 대.. 2024. 3. 27.
[ Android ] Android에서 Selector 사용 시 상태 정의 순서의 중요성 이해하기 Android에서 selector를 사용하는 것은 버튼이나 뷰의 다양한 상태(예: 선택됨, 클릭됨, 포커스됨 등)에 따라 다른 그래픽이나 색상을 표시할 수 있게 해 주는 유용한 기능이다. selector는 XML 파일로 정의되며, 태그 내에 여러 태그를 사용하여 각 상태에 대한 디자인을 지정하고, 각 태그는 특정 상태에 대응하는 그래픽 리소스를 지정한다. 오늘 기록 해 두고 싶은 내용은 selector를 사용할 때 상태 정의 순서의 중요성에 관한 것 이다. 평소에는 selector를 만들고 사용하는 데 큰 신경을 쓰지 않았었는데, 평소와 같이 버튼의 selector를 만들고 테스트를 해보니, selected와 enabled의 상태가 전혀 적용되지 않는 문제에 직면했다. 코드를 아무리 살펴봐도 문제가 없어.. 2024. 3. 26.
[ Android ] Android 레이아웃 재사용의 마법사: Include 태그와 데이터 바인딩 활용하기 include 태그는 안드로이드 레이아웃 작업을 할 때 매우 유용하게 활용 되는 태그이다. 이를 통해 하나의 레이아웃 파일을 다른 레이아웃 파일에 포함시킬 수 있으며, 이는 코드의 재사용성의 높이고 레이아웃 관리의 효율성을 개선하는 데 큰 도움이 된다. 예를 들어, 여러 화면에서 공통적으로 사용되는 헤더나 푸터 같은 UI 요소가 있다면, 해당 요소들을 별도의 레이아웃 파일로 만들어 두고, 각 화면의 레이아웃에서 include 태그를 사용해 해당 레이아웃 파일을 포함시킴으로써 여러 곳에서 이를 재사용할 수 있다. 이 방법을 통해 중복 코드를 줄이고, 유지 보수를 용이하게 만든다. 사용 방법은 1. 재사용할 레이아웃 파일 생성: 먼저, 재사용할 레이아웃 파일을 먼저 만들어주면 되는데 상단 바와 같이 레이아웃.. 2024. 3. 25.
[ Android ] Android에서 전역 상태 관리: Application 클래스 활용하기 시스템바 알림 기능을 구현하는 과정에서, 알림 시간을 표현하기 위해 "오전"과 "오후"와 같은 문자열 값을 리소스에서 불러오려면 context가 필요했다. 하지만 Utils 클래스에서는 context를 직접 참조할 수 없었다. 이 문제를 해결하기 위해 WallPadApp.java 클래스에서 context를 반환하는 함수를 사용했다. 이 과정에서 WallPadApp 클래스의 목적과 그 안에 정의된 함수나 값들이 어떻게 분류되어 있는지에 대한 궁금증이 생겼다. WallPadApp 클래스를 살펴보니, 이는 Application 클래스를 상속받아 커스터마이즈되어 있었다. 공식문서를 찾아보니, 전역 애플리케이션 상태를 유지하기 위한 기본 클래스입니다. 하위 클래스를 생성하고 이 하위 클래스의 정규화된 이름을 "a.. 2024. 3. 25.
[ Java ] Java에서 문자열 처리의 효율성을 높이는 방법: StringBuilder 활용하기 StringBuilder는 Java에서 문자열을 효율적으로 처리하기 위한 클래스다. 문자열 알고리즘 문제를 풀다가 알게된 자바 클래스인데, 일반적으로 문자열을 연결하거나 수정할 때 사용되며, 가변적인 문자열을 다루는데 유용하다. 기존의 String 클래스는 불변 이기 때문에 문자열을 수정할 때마다 새로운 문자열 객체를 생성하게 된다. 이로 인해 문자열 연산이 많은 경우 메모리와 성능에 부담을 줄 수 있다. 이러한 문제를 해결하기 위해 나온 것이 바로 StringBuilder 클래스 이다. StringBuilder는 가변적이며, 내부적으로 가변 크기의 문자열 버퍼를 가지고 있다고 한다. 따라서 문자열을 추가하거나 수정할 때마다 새로운 객체를 생성하지 않고도 효율적으로 처리 할 수 있게 되는 것이다. Str.. 2024. 3. 22.
[ Android ] 안드로이드 개발에서 HtmlCompat.fromHtml을 이용한 HTML 태그 적용: CDATA와 이스케이프 문자 활용법 다음과 같이 텍스트의 색상이 달라지는 레이아웃을 구현을 해야 하는 상황이었다. "비상 버튼을 3초이 눌러\n 발생 또는 해제" 위와 같은 한 문장의 레이아웃을 만들기 위해서 TextView를 세 개씩 사용하는 방식은 레이아웃구조를 지나치게 길어지게 만들어 비효율 적이라는 생각이 들었다. 레이아웃 구조를 늘리지 않고 텍스트의 색상을 바꿔줄 수 있는 방법이 없을 지 찾아 보았고, HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);를 사용하여 코드상으로 구현을 할 수 있다는 것을 알아내었다. 사용 방법은 private String unmodeDesHtmlText = "5회 연속 빠르게 탭하여 시각 장애인 모드를 해제"; private String cal.. 2024. 3. 21.
[ Java ] Integer.parseInt(String s, int radix)를 활용한 자바에서의 진법 변환 기술 2진수를 10진수로 바꿔주는 로직을 짜다가 알게 된 메서드이다. 처음에는 char[] stringArray = str.toCharArray(); String binaryNumber = String.valueOf(stringArray); int decimalNumber = 0; int power = 0; for (int i = binaryNumber.length() - 1; i >= 0; i-- ){ int digit = Character.getNumericValue(binaryNumber.charAt(i)); decimalNumber += digit * Math.pow(2, power); power++; } 이런식으로 일일히 반복문을 돌며 2의 제곱수를 곱해주는 방식으로 구현을 해 줬었는데, 자바에 주어.. 2024. 3. 20.
[ Java ] 자바에서 "1"과 '1'의 차이점: 문자열과 문자 할당 이해하기 알고리즘을 풀다가 알게 된 사실을 정리 해 두고자 한다. 다음과 같이 String 값을 char[]로 바꾼 상황에서 반복문을 돌며. 문자 c가 "#"과 같을 경우 이진수인 "1"로 바꿔주고자 한 로직이었는다. 발견한 의문점은 stringArray[i] = '1'; 로 할 경우에는 에러가 뜨지 않는데, stringArray[i] = "1"; 로 했을 경우에는 다음과 같이 Type mismatch 에러가 난다는 것이었다. 위 현상이 왜 일어나는 것인지 찾아보니, stringArray[i] = '1';은 문자형(char)으로 '1'을 할당하는 것이므로 작은 따옴표 안에 있는 문자는 문자형으로 인식되며, char 타입에 저장이 된다. 반면에 stringArray[i] = "1";은 큰 따옴표(")로 감싸진 문자.. 2024. 3. 19.
[ JavaScript ] 클로저: 캡슐화 예시를 통해 클로저 개념 쉽게 이해해보기 클로저 개념은 자바스크립트 공부에서 어려움을 느끼게 했던 주제 중 하나인데, 개인적으로 이해하기 쉬웠던 방법을 정리 해 보고자 한다. 클로저 개념을 쉽게 이해하기 위해서는 먼저, 스코프 개념을 이해하는 것이 중요하며 다음으로, 클로저가 되기 위한 조건을 파악하는 것이 필요하다. 클로저란? 클로저란 자신이 생성될 때의 스코프에서 알 수 있었던 변수 중 언젠가 자신이 실행될 때 사용할 변수들만 기억하여 유지시키는 함수이다. - 출처: 함수형 자바스크립트 프로그래밍 - 위에서 말했듯이, 클로저를 이해하기 위해서는 클로저가 되기 위한 조건을 파악하면 명확하게 이해가 가능해 진다. 다음은 클로저가 되기 위한 조건이다. 1. 내부 함수가 외부 함수 내에서 정의되어야 한다. (함수 내부에 정의된 함수) 2. 내부 함.. 2023. 5. 24.
[ JavaScript ] 호이스팅: 변수와 함수의 동작 방식 및 결과의 차이점 비교 호이스팅이란? 변수나 함수가 어디서 선언되든지 해당 스코프 최상단에 위치하게 되어 동일 스코프 어디서든 참조할 수 있는 것을 말한다. 호이스팅은 변수와 함수의 동작 방식에 따라 출력 결과가 다르게 나타나는데, 이러한 차이점에 흥미를 느껴 각각의 경우를 자세히 정리하고자 한다. 먼저, 호이스팅에 따른 출력값이 각각 다르게 나타나는 것을 이해하기 위해서는 선언 과 참조, 초기화 개념을 알아야 한다. 선언이란, 변수나 함수를 정의하고 해당 이름을 사용할 수 있도록 식별자(변수 이름)을 지정하는 것이다. 변수선언은 var, let, const를 사용할 수 있고, 함수선언은 function을 사용할 수 있다. 참조란, 선언된 변수나 함수에 접근하여 값을 읽거나 변경하거나 함수를 호출하는 것을 의미한다. 변수나 함.. 2023. 5. 22.
[ JavaScript ] var와 let의 유효범위 및 스코프 동작의 차이 "var를 사용하지말고 let•cosnt를 사용해라."는 말은 코딩공부를 시작하면서 많이 들었던 조언 중 하나였다. 그러나 var를 사용하지 말아야 하는 이유에 대해 깊게 이해하지 않고 그냥 사용하지 않았던거 같다. 그런데 '자바스크립트의 코딩의기술' 책을 읽으면서 var와 let의 유효범위로 인한 차이점에 대한 설명을 보게 되었다. 읽다보니 스코프와 관련해서 아주 중요한 개념이 담겨있다는 생각이 들었다. 그 예시를 이해하기 쉽게 정리 해 두고자 한다. 위 두 로직을 보면 for문 내 변수 i를 var로 할당했는지 let으로 할당했는지에 따라 결과값이 다르는게 나오는것을 확인 할 수 있다. 왜 이런 결과가 나오는 것일까? 결론적으로 var와 let의 유효범위가 다르기 때문이다. var는 함수스코프를 따르.. 2023. 5. 21.