본문 바로가기

분류 전체보기71

[Java] 오버로딩과 오버라이딩: 객체 지향 프로그래밍에서의 메소드 다형성 이해하기 이슈 수정을 위해 생성자 오버로딩을 사용할 필요가 생겼다. 이를 잊지 않기 위해 오버로딩에 대해 정리하려고 한다. 그 과정에서 오버라이딩과의 비교가 자주 나오기 때문에, 이 두 개념을 함께 정리하고자 한다. 오버로딩과 오버라이딩은 비록 서로 다른 목적과 작동 방식을 가지고 있지만, 이들은 메소드 재정의의 중요한 형태로, 객체 지향 프로그래밍에서 메소드의 다형성을 구현하는 데 필수적인 기술이다. 오버로딩(Overloading) 오버로딩은 메서드 오버로딩과 생성자 오버로딩 두가지 형태로 나뉜다. 오버로딩은 같은 이름을 가진 메소드나 생성자를 여러 개 정의할 수 있게 하며, 매개변수의 타입, 개수, 순서에 따라 구분된다. 이를 통해 메소드나 생성자에 다양한 입력을 처리할 수 있는 유연성을 제공한다. 1. 메소.. 2024. 4. 2.
[Git] Git Diff 명령어로 변경사항 꼼꼼하게 검토하기 git diff 명령어는 Git에서 매우 유용하게 사용되는 도구 중 하나로, 두 커밋 사이의 차이점을 비교하거나, 작업 디렉토리와 인덱스(스테이징 영역) 또는 마지막 커밋과의 차이점을 확인할 때 사용된다. 로컬에서 작업한 내용을 원격지로 올리기 전, 변경사항 중에 문제가 없는지 확인하는 데 사용한다. 이를 통해 변경된 내용을 세밀하게 검토하고, 예상치 못한 변경사항을 발견하거나 수정 사항을 정리할 수 있다. 기본 사용법 작업 디렉토리와 인덱스(스테이징 영역) 비교: 변경사항이 스테이징 영역에 추가되지 않은 경우, 즉 git add를 실행하지 않은 변경사항을 확인할 때 사용한다. git diff 인덱스(스테이징 영역)와 마지막 커밋 비교: 스테이징 영역에 추가된 변경사항과 마지막 커밋과의 차이를 확인할 때.. 2024. 4. 1.
[Android] ItemTouchHelper.Callback으로 리사이클러뷰 아이템을 마스터하는 방법: 주요 오버라이드 메서드와 그 역할 ItemTouchHelper.Callback 클래스를 사용하면서 clearView 기능을 통해 드래그 앤 드롭 작업의 종료 시점을 감지할 수 있다는 것을 알게 되었다. 이 과정에서 ItemTouchHelper.Callback 클래스에는 clearView 외에도 다양한 유용한 오버라이드(Override) 메서드들이 있다는 것을 발견했다. 이러한 메서드들을 정리하여 기록해 두고자 한다. ItemTouchHelper.Callback 클래스는 리사이클러뷰의 아이템을 드래그 앤 드롭하거나 스와이프할 때 사용자 정의 동작을 구현할 수 있도록 해주는 중요한 클래스이다.이 클래스를 통해 다음과 같은 여러 메서드들을 오버라이드할 수 있다. isLongPressDragEnabled() 역할: 길게 눌러서 드래그를 시작할 .. 2024. 4. 1.
[ 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.