📊 분류 전체보기 281

[Java] 추상 클래스와 인터페이스 차이 (2탄)

Interface 나 abstract Class 는 상속(extends)받거나, 구현(implements) 하는 Class 가 Interface 나 Abstract Class 안에 있는 Abstract Method 를 구현하도록 강제하는 공통점을 가지고 있다. 그렇다면 Interface 와 Abstract Class 두 종류가 존재하는건 왜일까? 결론부터 말하자면, Interface 와 Abstract Class 는 존재 목적이 다르다 Interface Interface 는 부모, 자식 관계인 상속 관계에 얽메이지 않고, 공통 기능이 필요할 때 Abstract Method 를 정의해놓고 구현(implements) 하는 Class 에서 각 기능들을 Overriding 하여 여러가지 형태로 구현할 수 있기에..

👩🏻‍💻 TIL 2023.01.04

2022 회고록

안녕하세요 ji-hyun 입니다 ✋회고록을 적으며 2022년을 되돌아보고 그와 동시에 2023 계획을 세워보고자 합니다!  학업 - 졸업  올해 2월에 졸업을 하게 되었습니다! 🎓코로나 시기에 졸업을 하게 되어 학교에 사람도 없고 쓸쓸했지만 그래도 취업이라는 좋은 소식과 가족과 함께여서 좋았습니다혼자 학교 복도를 지나가봤는데 알 수 없는 감정이 올라왔습니다 (슬픔 같기도 하고..)아마 학생때 생활했던 여러 추억이 떠올랐던 것 같습니다 저는 학생때 열람실에서 혼자 시간 보내는 것을 좋아하는 내성적인 학생이었습니다그래서 그런지 학생때 이것저것 해보지 않은 아쉬움이 많이 컸습니다     취업 - 개발자의 삶  첨부할 사진을 고르다가 이 사진을 보니 회사에 갓 입사한 첫 기억이 떠오르는 것 같아 이 사진으로 ..

⏳ 회고 2023.01.02

Xcode Target, Project

workspace TARGETS 는 Xcode에서 Build를 실행하여 생성되는 최종 제품(?)(end product)입니다. project 란 project 는 모든 파일, 리소스, 하나 이상의 소프트웨어를 빌드하는데 필요한 정보의 저장소입니다. 그리고 연관된 Target 의 집합소입니다. (지금 하나의 Target 만 있는데, 프로젝트를 생성할 때 UI Test, Unit Test를 포함했으면 이 또한 Target 이 될 수 있고 또한 빌드를 할 때 각자가 빌드하는 Target 이 설정이 되어 있었을 것입니다.) 즉, 프로젝트는 target 을 하나 이상 포함합니다. 또한, 프로젝트는 모든 target 에 대한 기본 build setting 을 정의합니다. 정리 프로젝트는 연관된 Target 의 집합..

👩🏻‍💻 TIL 2022.12.29

[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

안드로이드 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