프래그먼트는 어떤 동작이나 UI의 일부입니다.

여러개의 프래그먼트를 하나의 액티비티에 결합하여 창이 여러개인 UI를 만들 수 있습니다.

하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있습니다.

 

프래그먼트는 액티비티의 모듈형 부품이라고 생각하면 됩니다.

 

프래그먼트는 수명주기를 가지고 있고 입력 이벤트를 수신할 수 있고, 액티비티 실행 중에 추가 및 삭제가 가능합니다.

즉, 다른 액티비티에서 다시 사용할 수 있는 하위 액티비티와 같은 개념입니다.

 

프래그먼트는 항상 액티비티 내에 속해야하며, 프래그먼트의 수명 주기는 호스트 액티비티의 수명 주기에 영향을 받습니다.

액티비티가 일시정지된 경우, 거기 속한 모든 프래그먼트도 일시정지 되며 액티비티가 소멸되면 모든 프래그먼트도 소멸됩니다.

액티비티가 실행중인 동안에는 각 프래그먼트를 추가, 제거하는 등 개별적으로 조작할 수 있습니다.

이러한 프래그먼트 조작(트랜잭션)을 수행하는 경우 이 것을 액티비티가 관리하는 백 스택에도 추가할 수 있습니다.

각 백 스택 항목이 발생한 프래그먼트 트랜잭션의 기록이 됩니다. 이 백 스택을 사용해 사용자가 프래그먼트 조작(트랜잭션)을 다시 되돌릴 수 있습니다. 이때 뒤로가기 버튼을 누르면 됩니다.

 

프래그먼트를 액티비티 레이아웃에 추가하면, 해당 프래그먼트는 액티비티의 뷰 계층 내에서 뷰그룹에 들어가고 자체적인 뷰 레이아웃을 정의합니다. (뷰그룹이란 다른 뷰를 포함할 수 있는 뷰입니다. 레이아웃, 컨테이너)

액티비티의 레이아웃 파일에서 <fragment>요소로 프래그먼트를 선언하거나 기존 뷰그룹에 추가하는 방법으로 애플리케이션 코드에서 프래그먼트를 선언하면 액티비티 레이아웃에 프래그먼트를 삽입할 수 있습니다.

 

수명 주기

 

 

뷰모델 개요

뷰모델 클래스는 수명주기를 고려하여 UI관련 데이터를 저장하고 관리하도록 설계되었습니다.

이 클래스를 이용하여 화면 회전과 같이 구성을 변경할 때도 데이터를 유지할 수 있습니다.

뷰 모델 클래스는 수명주기에 상관없이 데이터를 사용하기위해 사용한다.

 

 

안드로이드에서는 액티비티 및 프래그먼트와 같은 UI컨트롤러의 수명주기를 관리합니다.

프레임워크는 특정 사용자 작업이나 완전히 통제할 수 없는 기기 이벤트에 대한 응답으로 UI컨트롤러를 제거하거나 다시 만들도록 결정할 수 있습니다.

안드로이드는 상황에 따라 리프레시가 일어난다.

 

시스템에서 UI컨트롤러를 제거하거나 다시 만들면 컨트롤러에 저장된 일시적인 모든 UI 관련 데이터가 손실됩니다.

예를 들어 앱에 있는 액티비티 중 하나는 사용자 목록 데이터를 가지고 있을 수 있습니다.

Config 변경을 위해 액티비티를 다시 생성하면 새 활동은 사용자 목록을 다시 가져와야 합니다.

데이터가 단순한 경우 활동은 onSaveInstanceState() 메서드를 이용해 onCreate()번들에서 데이터를 복원할 수 있습니다.

하지만 이 접근 방법은 사용자 목록이나 비트맵과 같은 대용량 데이터가 아니라, 직렬화 후 역직렬화할 수 있는 소량의 데이터에만 적합합니다.

리프레시가 일어나 다시 실행되는 경우, UI관련 데이터가 사라진다. 이런 일이 일어나기에 뷰모델을 사용한다.

 

액티비티 및 프래그먼트와 같은 UI 컨트롤러는 주로 UI 데이터를 표시하거나, 사용자 작업에 반응하거나, 권한 요청과 같은 운영체제 커뮤니케이션을 처리하기 위한 것입니다. 또한 UI 컨트롤러에 데이터베이스나 네트워크에서 데이터 로드를 담당하도록 요구하면 클래스가 팽창됩니다. UI 컨트롤러에 과도한 책임을 할당하면 단일 클래스가 다른 클래스에 작업을 위임하지 않고 홀로 모든 앱 작업을 처리하려고 할 수 있습니다. 또한 이런 방법으로 UI 컨트롤러에 과도한 책임을 할당하면 테스트가 훨씬 더 어려워집니다.

액티비티나 프래그먼트는 사용자와의 인터페이스 역할을 하는데, 여기에 비즈니스 로직을 넣으면 관리가 어려워진다.

 

UI 컨트롤러 로직에서 뷰 데이터 소유권을 분리하는 방법이 훨씬 더 쉽고 효율적입니다.

데이터를 따로 관리하는 것이 더 쉽고 효율적이다.

 

뷰모델 구현

아키텍처 구성요소는 UI의 데이터 준비를 담당하는 UI 컨트롤러에 뷰모델 도우미 클래스를 제공합니다.

뷰모델 개체는 구성이 변경되는 동안 자동으로 보관되므로, 이러한 개체가 보유한 데이터는 다음 활동 또는 프래그먼트 인스턴스에서 즉시 사용할 수 있습니다. 예를 들어 앱에서 사용자 목록을 표시해야 한다면 다음 샘플 코드에서와 같이 사용자 목록을 확보하여 활동이나 프래그먼트 대신 뷰모델에 보관하도록 책임을 할당해야 합니다.

public class MyViewModel extends ViewModel {
        private MutableLiveData<List<User>> users;
        public LiveData<List<User>> getUsers() {
            if (users == null) {
                users = new MutableLiveData<List<User>>();
                loadUsers();
            }
            return users;
        }

        private void loadUsers() {
            // Do an asynchronous operation to fetch users.
        }
    }

그 후 다음과 같이 액티비티에서 목록에 접근할 수 있습니다.

    public class MyActivity extends AppCompatActivity {
        public void onCreate(Bundle savedInstanceState) {
            // Create a ViewModel the first time the system calls an activity's onCreate() method.
            // Re-created activities receive the same MyViewModel instance created by the first activity.

            MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
            model.getUsers().observe(this, users -> {
                // update UI
            });
        }
    }
    

액티바티가 다시 생성되면 첫 번째 액티비티에서 생성된 동일한 MyViewModel 인스턴스를 받습니다. 소유자 활동이 완료되면 프레임워크는 리소스를 정리할 수 있도록 뷰모델 개체의 onCleared() 메서드를 호출합니다.

*주의: 뷰모델은 뷰, 라이브사이클 또는 액티비티 컨텍스트에 대한 참조를 포함하는 클래스를 참조하면 안된다.

 

뷰모델 객체는 뷰 또는 LifecycleOwners의 인스턴스보다 오래 남아있도록 설계되었습니다. 이러한 설계로 뷰 및 라이프사이클 객체에 대해 알지 못해도 뷰모델을 다루는 테스트를 쉽게 작성할 수 있습니다.

뷰모델 객체에는 라이브데이터 객체같은 LifecycleObsers가 포함될 수 있습니다. 그러나 뷰모델 객체는 라이브데이트 객체같은 수명주기를 인식하는 Observable의 변경상항을 관찰해서는 안됩니다.

뷰모델은 시스템 서비스를 찾는 데 애플리케이션 컨텍스트가 필요하면 안드로이드 뷰모델 클래스를 확장하고 생성자에 애플리케이션을 받는 생성자를 포함할 수 있습니다.

 

뷰모델의 수명 주기

뷰모델 객체의 범위는 뷰모델을 가져올 때 뷰모델프로바이더에 전달되는 라이프사이클로 지정됩니다.

뷰모델은 범위가 지정된 라이프사이클이 영구적으로 경과될 때 까지, 즉 액티비티가 끝날때까지, 혹은 프래그먼트가 분리될 때까지 메모리에 남아있습니다.

뷰모델은 라이프사이클이라는 값으로 범위가 지정된다. 그리고 범위가 지정된 만큼 메모리에 남아있다.

 

일반적으로 시스템에서 액티비티 객체의 onCreate()메서드를 처음 호출할 때 뷰모델을 요청합니다.

 

액티비티 레이아웃 XML파일에 아래와 같이 추가하면 된다.

        <com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:passwordToggleEnabled="true">

            <EditText
                android:id="@+id/signupActivity_edittext_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="PASSWORD"
                android:inputType="textPassword" />
        </com.google.android.material.textfield.TextInputLayout>

app:passwordToggleEnabled="true"을 EditText를 감싸고 있는 레이아웃에 추가해준다.

 

파이어 베이스 프로젝트를 지우고 다시 안드로이드 앱과 연결하는 과정에서 계속 추가 확인이 안되었다.

 

기존의 있던 google-service.jason도 지우고 새로 추가하여 빌드 후 실행했지만 안되었다.

 

캐시 문제 관련 정보가 있어서

프로젝트에서 저 주황색으로 된 폴더를 다 지우고 다시 빌드 후 실행하니 확인이 되었다..

 

아직 안드로이드 어린이라 접한 문제..

 

1. Manifest파일에 속성을 추가한다.

 

액티비티에 screenOrientation이라는 속성을 추가하여 landscape로 할지, portrait로 할지 설정하면 된다.

 

        <activity android:name=".MapActivity" android:screenOrientation="landscape"/>
        <activity android:name=".StoryActivity" android:screenOrientation="landscape"/>
        <activity android:name=".StartActivity" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

유니티 에디터 인터페이스

메인 에디터 창은 몇 개의 창(윈도우, 뷰)으로 이루어져있다.

유니티에는 다양한 종류의 뷰(창)가 있고 각각 다른 역할을 가지고 있다.

 

에디터의 모양은 개인의 취향에 따라 다를 수 있다.

 

기본 윈도우 배열은 일반적으로 많이 사용되는 것들로 배치되어있다.

가장 일반적이고 실용적인 윈도우 배열은 아래와 같다.

 

프로젝트 창

프로젝트에서 사용할 수 있는 에셋의 라이브러리를 보여준다.

프로젝트에 에셋을 임포트하는 경우 여기에 나타난다.

씬뷰

씬을 편집하고 탐색할 수 있다. 씬뷰는 2D나 3D로 볼 수 있다.

 

Hierarchy 창

씬안에 있는 객체를 계층적으로 나타낸다. 

씬에 있는 객체는 모두 들어가있다.

이 창을 통해 어떤 객체가 다른 객체에 붙어잇는지 구조적으로 알 수 있다.

 

Inspector 창

현재 선택된 객체의 속성을 보거나 편집할 수 있게 해준다.

다른 종류의 객체는 다른 속성들을 갖는다.

툴바

툴바는 많이 사용되는 기능들이 들어가 있다. 

왼쪽에는 씬과 씬안의 객체를 조작할 수 있는 기본적인 툴들이 있다.

중앙에는 재생, 일시정지, 스텝 제어 버튼이 있다.

오른쪽에는 유니티 클라우드 서비스, 유니티 계정에 접근할 수 잇는 버튼이 있다.

그리고 레이어 메뉴와 레이아웃 메뉴가 있다.

 

툴바는 창이 아니다. 그래서 배열을 바꿀 수 없다.

 

 

출처

https://docs.unity3d.com/kr/530/Manual/LearningtheInterface.html

'개발 > 유니티' 카테고리의 다른 글

[유니티] 1. 설치하기  (0) 2019.12.21
<html>
</html>

1. 문서 형식 정의 태그

Document Type Definition

출력할 웹 페이지의 형식을 브라우저에게 전달한다.

문서의 최상위에 위치해야하며 대소문자를 구별하지 않는다.

 

HTML5

<!DOCTYPE html>

 

2. html 태그

웹페이지에 단 하나만 존재.

모든 요소는 html요소의 하위 요소이다.

 

html요소 역시 클로벌 어트리뷰트를 지원한다.

<html>
</html>

 

3. head 태그

head 요소는 메타데이터를 포함하기 위한 요소이다.

웹페이지에 단 하나만 존재.

메타데이터는 title, style, link, script에 대한 정보를 가진 데이터로 화면에 출력되지 않는다.

 

3.1 title 태그

문서의 제목을 정의. 정의된 제목은 브라우저의 탭에 출력된다.

<!DOCTYPE html>
<html>
    <head>
        <title>브라우저 탭에 표시되는 제목</title>
    </head>
</html>

 

3.2 style 태그

HTML문서에서 사용되는 스타일을 정의하는 정보를 정의.

<!DOCTYPE html>
<html>
    <head>
        <title>브라우저 탭에 표시되는 제목</title>
        <style>
          body {
            background-color: black;
            color: white;
          }
        </style>
    </head>
    <body>
    </body>
</html>

 

3.3 link 태그

link 요소는 외부 문서를 연결화는 태그.

주로 css같은 파일을 연결. 폰트 주소를 연결할 수도 있다.

 

<!DOCTYPE html>
<html>
    <head>
        <title>브라우저 탭에 표시되는 제목</title>
        <link rel='stylesheet' type='text/css' href='sample.css'>
    </head>
    <body>
    </body>
</html>

3.4 script 태그

자바스크립트 코드를 작성하는 공간이다.

 

src 어트리뷰트로 외부 자바스크립트 파일을 불러올 수 있다.

 

3.5 meta 태그

메타 데이터 정의시 사용. 메타데이터는 브라우저, 검색엔진 등에 의해 사용된다.

 

charset으로 문자셋을 정의할 수 있다.

검색엔진이 사용할 키워드를 정의할 수 있다.

웹페이지의 설명을 정의할 수 있다.

웹페이지의 설명을 정의할 수 있다.

저자를 정의할 수 있다.

페이지 리프레시 주기를 정의할 수 있다.

 

4. body 태그

문서의 내용을 담는 곳 이다.

문서에 하나만 존재한다.

 

출처

https://poiemaweb.com/html5-tag-basic

'개발 > ' 카테고리의 다른 글

[HTML] 3. 시맨틱 웹  (0) 2019.12.19
[HTML] 2. HTML5 기본 문법  (0) 2019.12.18
[HTML] 1. 프런트엔드 개발자 학습 방향  (0) 2019.12.17

1. 유니티

3D 및 2D 비디오 게임의 개발 환경을 제공하는 게임 엔진.

 

 

2. 설치하기

https://unity3d.com/kr/get-unity/download

 

Download Unity!

Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.

unity3d.com

위의 링크에 들어가서 

 

 

유니티 허브를 다운받는다.

유니티 허브를 받으면 여러가지 버전의 유니티를 설치하고 관리할 수 있다.

 

새로운 유니티 버전을 설치하고 싶다면 추가를 눌러서 설치하면 된다.

 

 

'개발 > 유니티' 카테고리의 다른 글

[유니티] 2. 에디터 인터페이스 소개  (0) 2019.12.28

+ Recent posts