EndOfTheDay (이하 '개발자')은(는) 「개인정보 보호법」 제30조에 따라 이용자의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다.


1. 개인정보의 처리 목적
개발자는 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며, 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제32조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.
•앱 기능 제공: 사용자의 목표 설정, 달성 기록 저장, 캘린더 관리 및 진행률 계산.
•AI 피드백 제공: 사용자가 입력한 목표 내용을 바탕으로 한 AI 응원 및 조언 메시지 생성.


2. 처리하는 개인정보의 항목
개발자는 서비스 제공을 위해 최소한의 정보만을 처리하며, 대부분의 데이터는 이용자의 기기 내부에만 저장됩니다.
•사용자 입력 데이터: 목표 내용, 성공/실패 여부, 날짜별 기록 (기기 내부 DB 저장).
•자동 수집 정보: 앱 이용 기록, 기기 정보 (구글 서비스 라이브러리 이용 시 발생할 수 있음).


3. 개인정보의 제3자 제공 (중요)
본 앱은 AI 피드백 기능을 위해 다음과 같이 제3자에게 정보를 제공합니다.
•제공받는 자: Google (Gemini API 서비스 제공자)
•제공 항목: 사용자가 입력한 목표 텍스트 내용
•제공 목적: 인공지능 기반의 목표 분석 및 피드백 생성
•주의사항: 사용자는 목표 입력 시 개인을 식별할 수 있는 민감한 정보(이름, 전화번호, 주소 등)를 입력하지 않도록 주의해야 합니다.


4. 개인정보의 저장 및 파기
•저장 장소: 본 앱의 모든 목표 데이터는 이용자의 기기 내 로컬 데이터베이스(Room DB)에 저장됩니다. 개발자의 외부 서버로 전송되거나 저장되지 않습니다.
•파기 절차: 이용자가 앱을 삭제할 경우, 기기 내에 저장된 모든 데이터는 즉시 파기됩니다.


5. 이용자의 권리·의무 및 행사방법
이용자는 언제든지 앱을 삭제함으로써 개인정보 처리에 대한 동의를 철회할 수 있으며, 앱 내의 기능을 통해 데이터를 직접 수정하거나 삭제할 수 있습니다.

 

6. 개인정보의 안전성 확보 조치
개발자는 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다.
•내부 저장소 활용: 데이터가 외부로 유출되지 않도록 안드로이드 시스템의 보안 저장 구역을 활용합니다.


7. 개인정보 보호책임자 및 문의처
본 앱의 개인정보 보호와 관련하여 문의사항이 있으신 경우 아래의 연락처로 연락해 주시기 바랍니다.
•이메일: rkttgh@naver.com
시행일자: 2026년 5월 26일

inform과 announce둘다 모두 알리다 라는 뜻을 가지고 있지만 어떤 차이점이 있을까?

 

inform은 정보가 필요한 사람, 소수에게만 알릴 때 사용하고

announce는 불특정 다수의 사람들에게 알리거나 제품 출시를 발표할때 사용한다. inform보다 더 공식적인 표현이다.

'영어 공부' 카테고리의 다른 글

조동사 정리  (1) 2025.05.30
Words (101~199)  (0) 2025.05.28
Words (1~100)  (5) 2025.05.22

- 부모뷰가 자식 뷰의 터치이벤트를 가로채지 못하게 하는 함수 (requestDisallowInterceptTouchEvent)

(리사이클러뷰안에 웹뷰의 줌 이벤트가 있는 경우 리사이클러뷰의 스크롤 이벤트가 줌 터치이벤트를 가로채는 경우가 있어서 사용함)

requestDisallowInterceptTouchEvent(true) 
//true: 부모뷰가 터치이벤트 가로채지 못함
//false: 부모뷰가 터치이벤트 가로챌 수 있음

 

EditText에 실시간으로 입력된 값에따라 특정 이벤트를 발생시키거나 뷰를 보이게해야 할 때가 있다. 그런경우 TextWatcher라는 Interface를 사용하여 EditText에 실시간으로 입력된 값을 받아 올 수 있다.

 

editText.addTextChangedListener(object : TextWatcher {
            override fun **afterTextChanged**(s: Editable?) {
                // text가 변경된 후 호출
                // s에는 변경 후의 문자열이 담겨 있다.
            }

            override fun **beforeTextChanged**(s: CharSequence?, start: Int, count: Int, after: Int) {
                // text가 변경되기 전 호출
                // s에는 변경 전 문자열이 담겨 있다.
            }

            override fun **onTextChanged**(s: CharSequence?, start: Int, before: Int, count: Int) {
                // text가 바뀔 때마다 호출된다. 
                checkEmail()
            }
        })

 

afterTextChanged(s : Editable?) {}

  • Text가 변경된 후 호출, s→ 변경후의 문자열

beforeTextChanged(s : CharSequence?, start: Int, count: Int, after: Int )

  • Text변경 전 호출 s → 변경전의 문자열
  • start : s에 저장된 문자열에서 새로 추가될 문자열의 시작 위치값(인덱스)
  • count : s에 새로운 문자열이 추가된 후 문자열의 길이
  • after: 새로 추가될 문자열의 길이

onTextChanged(s : CharSequence?, start: Int, before: Int, count: Int)

  • Text실시간 호출 s → 실시간으로 변경되는 문자열
  • start : 새로 추가된 문자열의 시작 위치 값
  • befoer : 삭제된 기존 문자열의 개수
  • count : 새로 추가된 문자열의 개수

+ Recent posts