전체 글 280

[Flutter] 앱 버전관리 규칙

나는 빌드하면서 계속 앱 버전 관리에 대해서 헷갈렸었다. 버전을 잘못 올리면 어떡하지 하는 걱정, 불안감이 가득했다. 하지만 알고보면 간단하다. 내가 겪은 예시의 상황을 들며 자세히 설명해보겠다. 버전 네임 먼저 버전 네임에 대해서 알아보자. 버전 네임은 다음과 같이 이루어진다. Major.Minor.patch 첫 번째 자리는 메이저한 업데이트, 두 번째 자리는 기능 리뷰얼 정도의 중규모 업데이트때, 세 번째 자리는 자잘한 디버깅 및 약간의 수정 일 때, 이들의 숫자를 하나씩 올린다. 그러면 만약 버전 네임이 v1.5.2 라고 하자 뒤에 + 는 무엇을 의미하는 걸까 이것은 빌드 횟수를 말하는 것이다. 이는 빌드할 때마다 무조건 올려준다고 생각하면 된다. 만약 현재의 버전이 v1.4.2+90 인데 기능 리..

👩🏻‍💻 TIL 2022.12.28

[Dart] Factory Constructor

Factory Constructor Factory Constructor 는 특이하게도 메서드처럼 바디가 있음 무조건 현재 클래스의 인스턴스를 반환해줘야 함 void main(){ final parent = Parent(id: 1); print(parent.id); final child = Child(id: 3); print(child.id); } class Parent { final int id; Parent({ required this.id, }); factory Parent(int id) { return Parent(id: id); // error } } class Child extends Parent { Child({ required super.id, }); } 하지만 에러가 나는 것을 볼 수 있다..

🐦 Flutter 2022.12.11

[Dart] 슈퍼 이니셜라이저

Dart 2.17 부터 새로운 단축 구문을 사용하여 생성자 매개변수를 슈퍼클래스에 전달할 수 있습니다. 참고로 이전 구문은 다음과 같습니다. class Person { Person(this.name); final String name; } // Old way: before Dart 2.17 class Employee extends Person { Employee(String name, this.salary) : super(name); final int salary; } 즉 부모 생성자에 인수를 전달하기 위해 super 를 명시적으로 호출해야 했습니다. Dart 2.17 부터 다음과 같이 할 수 있습니다. // New way: Dart 2.17 and above class Employee extends P..

🐦 Flutter 2022.12.11

안드로이드 인텐트 필터

암시적 인텐트 수신 앱이 수신할 수 있는 암시적 인텐트가 어느 것인지 알리려면, 요소를 사용하여 각 앱 구성 요소에 대해 하나 이상의 인텐트 필터를 메니페스트 파일에 선언합니다. 각 인텐트 필터는 인텐트의 작업, 데이터 및 카테고리를 기반으로 어느 유형의 인텐트를 수락하는지 지정합니다. 시스템은 인텐트가 인텐트 필터 중 하나를 통과한 경우에만 암시적 인텐트를 앱 구성 요소에 전달합니다. 참고: 명시적 인텐트는 항상 자신의 대상에게 전달되며, 이는 구성 요소가 어떤 인텐트 필터를 선언하든 무관합니다. 앱 구성 요소는 자신이 수행할 수 있는 각각의 고유한 작업에 대하여 별도의 필터를 선언해야 합니다. 예를 들어 이미지 갤러리 앱에 있는 어떤 액티비티에 두 개의 필터가 있을 수 있습니다. 한 필터는 이미지를 ..

👩🏻‍💻 TIL 2022.12.05

안드로이드 Manifest 파일

뜻(Meaning) 명사 - 적하목록(선박 또는 항공기에 적재된 화물의 목록) 형용사 - 명백한 동사 - 나타나다 안드로이드에서 매니페스트란 "안드로이드 시스템이 앱의 코드를 실행하기 전에 확보해야 하는 앱에 대한 필수 정보를 시스템에 제공하는 목록" 이라고 정의할 수 있습니다. 역할(Role) - Java 패키지의 이름을 지정할 수 있다. 패키지지 이름은 곧 프로젝트의 식별자! 사람으로 따지면 주민등록번호 또는 바꿀 수 없는 이름과 같다. - 후에 알게될 액티비티, 서비스, 브로드캐스트, 리시버 등 앱을 이루는 구성요소들의 클래스 이름을 지정하고 구성요소들이 실행될 수 있는 조건을 기술한다. - 앱이 장치 또는 구성요소들과 상호작용하기 위해 필요한 권한을 설정한다. - 앱이 연결되어야 하는 라이브러리를..

👩🏻‍💻 TIL 2022.12.05

앱이 도중 꺼지는 이유에 대해 분석해보았다

제목 그대로 어느 날, QA 를 하시는 한 분이 내가 만든 기능의 리뷰를 작성하던 도중 앱이 꺼지는 것 같다고 하셨다. 이전 QA 에서 앱이 꺼졌다고 보고한 사람들이 없었는데 왜 갑자기 이런 현상이 일어난 걸까? 또한 내가 쓴 코드에 대해선 여러 번 체크를 해봤기 때문에 코드에선 100% 아무런 잘못이 없다고 나는 확신을 하고 있었다. QA 를 하시는 분이 쓰는 핸드폰은 갤럭시이며 회사의 공용 테스트폰 iphone 7 로 테스트를 하고 있었다. 내가 테스트하는 폰들은 이런 현상이 일어나지 않았기에 QA 분에게 테스트폰을 잠시 빌려서 디버깅을 해보겠다고 부탁하였다. 그런데 테스트폰을 본 순간 문득 예전 기억이 떠올랐다. 옆에 개발하시는 분이 이 폰으로 디버깅하는데 속도가 너무 느리다고 하셨다. 그래서 나는..

👩🏻‍💻 TIL 2022.12.02

[Swift] 인스턴스의 생성과 소멸

인스턴스의 생성과 소멸 이니셜라이저와 디이니셜라이저 init, deinit 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. class PersonA { // 모든 저장 프로퍼티에 기본값 할당해야 함! var name: String = "unknown" // var name: String // 이렇게 쓰면 error -> 기본값 없음 var age: Int = 0 var nickname: String = "nick" } let jason: PersonA = PersonA() // 인스턴스 생성될 때 모든 저장 프로퍼티에 기본값 할당됨 jason.name..

🦜 Swift 2022.11.20

[Swift] 상속

상속 스위프트의 상속은 클래스, 프로토콜 등에서 가능하다 열거형, 구조체는 상속이 불가능하다 스위프트는 다중상속을 지원하지 않다 이번 파트에서는 클래스의 상속에 대해서 알아보자 class 이름: 상속받을 클래스 이름 { 구현부 } class Person { var name: String = "" func selfIntroduce() { print("저는 \(name)입니다") } // final 키워드를 사용하여 재정의를 방지할 수 있습니다 // 즉 자식 클래스에서 상속 받았을때 override 방지 final func sayHello() { print("hello") } // 타입 메서드 // 재정의 불가 타입 메서드 - static // 자식 클래스에서 재정의 불가 static func typeMet..

🦜 Swift 2022.11.20

[Swift] 프로퍼티 감시자

// 프로퍼티 감시자 struct Money { // 프로퍼티 감시자 사용 var currencyRate: Double = 1100 { willSet(newRate) { print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다") } didSet(oldRate) { print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다") } } // 프로퍼티 감시자 사용 var dollar: Double = 0 { // willSet의 암시적 매개변수 이름 newValue !!! willSet { print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다") } // didSet의 암시적 매개변수 이름 oldValue didS..

🦜 Swift 2022.11.20