전체 글
-
싱글톤 패턴소프트웨어 2021. 6. 8. 14:44
보통의 클래스 생성자의 경우 생성자가 public 이며, 객체를 할당할때 new 로 인스턴스를 생성한다. 하지만 싱글톤의 경우 클래스 내부에 private SingletonClass() { // 생성자 } 와 같은 형식으로 private 생성자를 만든다. 때문에 new 로 객체를 생성할수가 없음.. 싱글톤은 클래스가 로딩될때 최초 1회 할당된 객체를 계속해서 재사용하는 목적으로 사용. (인스턴스를 사용할때 생성하는게 아님, 1회 할당하고 계속 재사용) 같은 객체를 여러번 사용하는것이 아닌, 1번 생성해서 계속 사용하기 때문에 메모리 절감 효과가 있다. 전역적인 데이터 공유가 가능해진다. 단점으로는 멀티 쓰레드 환경에서 동시 접근에 대한 문제가 생길수있어서, 이에대한 조치가 필요하다. 자바에서는 synch..
-
java 자료구조, arrayList와 linkedList소프트웨어 2021. 5. 31. 03:44
** 어레이리스트가 자료 탐색은 빠름. 하지만 요소 중간에 수정이나 삭제 삽입을 하면, 해당인덱스를 제외한 나머지 요소들이 인덱스가 뒤로 밀려나거나 땡겨지거나하기 때문에 느림. (순차적으로 add하는식으로 추가하거나 순차적으로 삭제할땐 별상관없음..) arrayList클래슨 내부에보면 grow 메소드가 존재하는데, 해당 메소드 내부에서는 Arrays.copyOf를 통해서 기존 배열의 요소들을 더큰 배열에 복사하는 과정을 수행함. 자료가 적을때는 괜찮겠지만 많아지면 비효율적임.. ** 링크드리스트는 인덱스가없기 때문에 특정 엘리먼트의 양옆의 요소를 메모리주소를 서로 비교하면서 찾아서 일반 사용시는 느린편. 하지만 링크드리스트는 수정삭제가 이뤄질때 바로 옆 요소의 주소만 영향을받기 때문에 이경우에 한해서 빠..
-
static의 단점이나 위험요소소프트웨어 2021. 5. 16. 20:06
static은 글로벌상태를 상징함.. 글로벌스테이트는 추론과 테스트가 까다롭고, 다른 여러곳에서 접근이 가능하기 때문에 다양한 곳에서 영향을 줄수있게됨 상태변화를 알수없어 테스트하기도 까다로움 게다가 오버라이딩이 안되기 때문에 클래스 확장도 어려움 지나치게 남발하는것은 주의가 필요함 자바에서는 static이 프로그램 실행 내내 메모리에 할당되어있기 때문에..가비지 컬렉터로 해제가 안됨 *멀티쓰레드 환경에서는 동기화처리를 해줘야한다. 인스턴스가 여러개 할당될수도있기 때문..
-
static에 관해..소프트웨어 2021. 5. 15. 00:19
우아한Tech 유튜브 채널을 통한 공부 정리 (자바의 스태틱 ) 1.static 변수 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수 예를들어 public class Person{ private String name = "blah"; } 이런식이면, 각각 생성될때마다 다른메모리에 할당이됨.. 하지만 static으로하면 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수로 됨 2.static 메소드 public class Person{ public static void printName() { 함수 실행내용 } } --> 클래스를 호출하지않고, 생성자를통해 생성하지 않아도, 이미 static 로딩을 통해 메모리에 올라와있기 때문에 해당 메소드를 바로 사용할 수 있음. 3. ..
-
TabBarView PageView에서 위젯 리빌드 방지flutter 2021. 5. 3. 19:10
PageView등에서 children 위젯을 여러개 가질경우, 네비게이션바에서 그페이지가 아닌 다른 페이지를 들어가도, 전체 위젯이 계속 빌드됨.. 불필요한 rebuild를 막기위한 방법.. stackoverflow.com/questions/57704265/how-to-prevent-rebuild-statelesswidget-children-of-pageview How to prevent rebuild StatelessWidget children of PageView I've create simple PageView app to test multiple pages. import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class ..
-
플러터 라이프 사이클flutter 2021. 4. 21. 01:59
StatefulWidget LifeCycle createState : 프레임워크가 Stateful을 만들 때 createState 호출 mounted is true : createState가 state class를 만든 후 buildContext가 할당된다 할당된 경우 true 아닐경우 false 여기서 setState를 콜하면 widget이 시작되지않고 오류가 발생 initState : 객체가 위젯트리에 할당되었을 때 호출build 전에 데이터를 가져와야되는 경우 controller등을 설정하는 경우에 사용 didChangeDependencies : State의 의존성이 변경되었을 때 호출InheritedWidget, Provider등을 통해 데이터 변경 후 상태를 변경 build :..
-
runtransaction 트랜잭션 처리flutter 2021. 4. 21. 01:58
// 잘못된 예제라 수정필요함.. // 최신값을 가져와서 그값을 기준으로 업데이트해야함.. Future postLikeByUserId(String? postUid, String? userId) async { // 레퍼런스 가져오기 DocumentReference ref = _db.collection('posts').doc(postUid); //bool로 분기 if (await ifExistLike(postUid, userId!) == true) { await _db.runTransaction((transaction) async { var snap = await transaction.get(ref); // 배열요소값 삭제, 하위 콜렉션의 문서 삭제, 카운트 1 내림 if (snap.exists) {..