분류 전체보기 142

[IT] 객체지향 개발의 5원칙 (SOLID 원칙)

SOLID 는 객제치향 프로그래밍(OOP) 에서 디자인 원칙을 나타내는 다섯가지 원칙의 약자이다. 단일 책임 원칙 (Single Responsibility Principle - SRP): 클래스는 하나의 책임만 가져야 한다. → 클래스가 변경되어야 하는 이유는 단 하나여야 한다. 개방/폐쇄 원칙 (Open/Closed Principle - OCP): 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 새로운 기능이 추가되거나 변경이 필요할 때 코드를 수정하지 말고, 기존 코드를 확장하여 새로운 기능을 추가할 수 있어야 한다. 리스코프 치환 원칙 (Liskov Substitution Principle - LSP): 하위 타입은 상위 타입으로 치..

IT 2023.12.19

[Kotlin] Storage 이미지 저장, 불러오기, 삭제

📱테스트 환경 Samsung Galaxy Android 13 • Android 10 무지렁이 시절 이미지를 저장하고 싶은데, 이미지를 Room 에 저장하고 싶었다. 근데 Bitmap 형식은 Room 에 저장이 안되더라 .. ? 그래서 무지렁이인 나는 Bitmap 을 ByteArray 로 변환해서 Room 에 저장했다 ㅋㅋ 당연히 메모리도 무지막지하게 잡아먹었고 .. 나같이 하는 사람도 없으니 에러가 발생해도 해결하기도 어렵더라 .. 그러다가 멘토님께 설명을 들였는데 당연히 당황하셨고 ㅎ .. 스토리지에 이미지를 저장해놓고, 키값을 Room 에 저장해놓고 그걸로 불러다가 사용하는 거라고 친절하게 설명해주셨다. 해서 이 방법을 기록해 두려고 한다. fun saveImageToInternalStorage(co..

Kotlin 2023.12.19

JPEG vs PNG - 클라우드에 왜 JPEG 를 업로드 하라는걸까 ?

PNG 가 화질이 좋고 JPEG 가 화질이 더 안좋다 라는건 대부분 잘 알거라고 생각한다. 근데 용도에 따라서 확장자를 선택해야지 아무 생각없이 "헤헤 PNG 가 화질이 좋으니까 다 PNG 로 저장해버려야지" 하면 나처럼 용량 금방 꽉찬다. 그리고 무료로 쓰고있었다면 과금이 발생할거다. 개발 처음 연습하는 당시 이미지를 AWS 클라우드에 저장하는데 테스트 이미지도 넣고 ~ 실제 서비스에서 발생하는 이미지도 들어가고 ~ 하니까 진짜 엄 ~ 청 용량이 금방 차게 되버린다. 앞으로는 용도에 맞게 이미지 확장자를 선택할 수 있도록 그리고 다른사람에게 아는척 할 수 있도록 구분해서 알아 보도록 하겠다. JPEG (Joint Photographic Experts Group) 손실 압축을 사용하여 파일 크기를 줄이는..

IT 2023.12.01

[Kotlin] UUID 란 ? UUID 생성 하는 방법

val randomUUID: UUID = UUID.randomUUID().toString() // 결과 : f47ac10b-58cc-4372-a567-0e02b2c3d479 이런식으로 랜덤으로 된 고유한 값을 받고싶을 때 UUID 을 이용하면 간편하다. UUID 는 java 의 기본클래스로, 128비트(16바이트) 길이의 식별자로 고유한 식별자를 생성하기 위해 사용한다. 매번 호출할 때마다 다른 UUID 가 생성되기 때문에 그때에 맞춰서 값을 이용하면 된다. 그럼 이렇게 항상 랜덤으로 생성되는 값을 어디서 사용하냐 ? 데이터베이스의 기본 키 ( Primary Key ) : autoGenerate 를 사용하기도 하지만 이렇게 랜덤으로 생성한 고유 값을 사용할 수도 있다. 세션 식별자 및 토큰 : 값이 랜덤..

Kotlin 2023.12.01

Chrome 주요 단축키 모음 ( Windows, MAC )

옛날 IT 업종에서 일하신 분들이나 업계에서 높은 위치에 있으신 분들은 마우스 쓰시는 걸 불편해하시는 것 같다 .. 나는 게임을 많이해서 그런가 마우스 쓰는게 불편하지 않지만 IT 업계에 있으면서 마우스로 딸깍 딸깍 거리는걸 보는게 불편한 듯 하다 .. 나에게 자주 해주시는 두 가지의 말씀이 있는데 야근을 하는 이유는 일이 정말 많거나 일을 비효율적으로 하고 있거나이다. 마우스 움직이는 시간 1초를 모으면 1분이 되고 그 1분이 1시간이 되고 그 1시간이 하루가 돼서 하루를 절약해 업무를 효율적으로 할 수 있게 되는거다. 캬 .. 나는 정말 공감할 수 없는 말이었지만 .. 손에 익지도 않는 단축키를 쓰려고 노력하고 좀 익숙해 지니까 틀린말 하나 없더라 ㅎ 단축키가 너무 많아서 다 외우고 사용하지는 못하지..

IT 2023.12.01

[Kotlin] 이미지 다운로드받기 - ByteArray Image Download

📱테스트 환경 Samsung Galaxy Android 13 • Android 10 이미지를 저장하는 방식을 간단히 알아보도록 하자. 01.ImageDownLoad.kt 생성 if (imageData != null) { // 외부 저장소에 바이트 배열을 파일로 저장 val fileName = "downloaded_image.jpg" val file = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), fileName) FileOutputStream(file).use { fileOutputStream -> fileOutputStream.write(imageData) } // 갤러리에 이미지 추가 val m..

Kotlin 2023.11.29

[Kotlin] 애널리틱스 로그 보내기 - Analytics

📱테스트 환경 Samsung Galaxy Android 13 • Android 10 애널리틱스에 이런식으로 이벤트 이름 별 이벤트 수 에 바로 보이게 집계할 수 있도록 하는 방법을 알아보도록 하자. 01. build.gradle ( app ) 종속성 추가 apply plugin: 'com.google.gms.google-services' dependencies { ... implementation 'com.google.firebase:firebase-analytics:17.4.1' implementation(platform("com.google.firebase:firebase-bom:32.3.1")) implementation("com.google.firebase:firebase-analytics-ktx..

Kotlin 2023.11.26

[Kotlin] 상태바 상태 변경하기 - StateBar Changes

📱테스트 환경 Samsung Galaxy Android 13 • Android 10 카카오톡 상태바를 보면 검정색 글씨에 #9AADBC 색상을 사용한 것을 알 수 있다. 이처럼 변경하는 방법을 알아보도록 하겠다. window.statusBarColor 를 사용하면 상태바의 배경색상을 변경 할 수 있다. window.statusBarColor = Color.parseColor("#9AADBC") window.statusBarColor = Color.WHITE 이런식으로 HEX 코드값을 이용해서 색상을 보여줄 수도 있고, 간단하게 Color 에 등록한 색상을 사용할 수도 있다. 자신의 애플리케이션의 색상에 맞춰서 잘 보여주면 된다. window.decorView.systemUiVisibility 를 사용해서..

Kotlin 2023.11.25

[Kotlin] Text 에 Url 연결하기 - 택배검색 url 연결하기

📱테스트 환경 Samsung Galaxy Android 13 • Android 10 목표는 카톡과 유사하게 택배 송장번호를 색상을 입혀주고 Url 을 연결해줘서 검색할 수 있도록 해주는 것이다. 01. urlsTracking.kt 함수 생성 fun urlsAndTrackingNumber(text: String, textView: TextView) { val spannable = SpannableString(text) // URL 적용 val urlPattern = """(https?://[^\s]+)""".toRegex() for (match in urlPattern.findAll(text)) { val colorSpan = ForegroundColorSpan(Color.parseColor("#4187C..

Kotlin 2023.11.25