Activity란?

안드로이드의 4대 컴포넌트 (Activity, Serivce, Broadcast Receiver, Content Provider) 중 하나로

어플리케이션이 실행되었을 때 보여지는 화면을 구성하는 역활을 한다.

 

 

 

엑티비티는 다음과 같은 생명주기를 가진다. 어플리케이션이 시작되면 가장 먼저 onCreate()가 호출이 되며,

onCreate() 이전에 추가하는 경우 표시되지 않거나 오류가 발생하는 걸 확인할 수 있을 것이다.

 

하지만 하나의 엑티비티 가지고 어플리케이션을 표현하기엔 무리가 많기에 Intent를 활용하게 된다!

 

Intent란?

하나의 액티비티가 다른 액티비티를 실행시킬 수 있는 메세지 시스템을 의미.

 

특정 액티비티를 콕 찝어 시작시킬 수 있고 (명시적 Intent),

액티비티 간의 데이터 전달 목적으로 사용 할 수 있고,

특정 기능을 하는 액티비티를 시작 시킬 수 있다. (암시적 Intent),

 

메인 액티비티에 카메라와 전화, 서브 엑티비티에 표시할 텍스트를 입력받는 란을 만들고,

 

메인엑티비티에서 입력한 문자열을 표시해줄 TextView와  메인으로 가는 버튼을 만들어 주었다.

 

 

다만 카메라 위치정보 연락처 등의 민감 권한의 경우 메니페스트 파일을 다음과 같이 수정해주어야한다.

<application></application> 상단에 <uses-permission> 태그를 다음과 같이 작성해주었다.

코드는 다음과 같이 작성했다.

버튼에 클릭리스너를 달아주고, 퍼미션 여부를 확인한다. 그런 뒤 권한이 없으면 요청을 보내고, 

승인되어있다면 인자로 주어진 전화번호로 연결되도록 else 문을 작성했다.

 

서브액티비티로 가는 버튼에는 다음과 같이 클릭리스너를 달아주었다. 

getText()의 경우 타입이 Editable이기 때문에 안전하게 ToString()을 사용해서 문자열 형식으로 형변환 시켜주어야 한다.

 

서브 액티비티에서는 getIntent()를 사용해서 넘겨준 값을 받고, 

input이란 이름으로 edt_input의 문자열을 보내주었기 때문에 꺼내올땐 intent.getStringExtra를 통해

꺼내올 수 있다. 

메인 화면으로 돌아가는 버튼에는 finish();를 달아주었다. 

 

문자열이 잘 넘어가는 걸 확인할 수 있다.

민감권한의 경우 다음과 같이 권한을 요청하는 창이 뜬다. 허용된 이후에는 앱을 종료했다가 켜도 권한을 더 이상 요구하지 않는다.

 

 

 

 

 

2차 프로젝트를 위해 DB 멘토링을 받으면서 강사분이 객체지향에 대해 야무지게 설명을 해주셔서..

복습 겸 옮겨보고자 한다.

 

 

네이버 IT 용어사전 객체 검색 결과는 다음과 같다.

 

어렵긴 하지만...요약해보면 다음과 같다. 

 

객체란?

개념적인 것들 (사람/동물/사물/주문/예약/감정....등등)을 의미한다.

 

고유한 속성을 가지고 있다.

타인이 알 수 있는 것.

사전에 등록된 명사.

 

고유한 속성이란게 애매모호하면 타인이 알 수 있는 것, 사전에 등록된 명사 둘만을 생각해도 좋다.

 

즉 "asdlkfjasdflkklsdfwe"는 객체가 될 수 없다. 타인도 모르고 사전에도 없기 때문에!

하지만, 속성과 기능이 포함된 객체를 표현하려면 다른 게 필요한데, 이럴때 Class를 사용한다.

클래스는 크게 두 가지로 나눌 수 있다.

 

사용자 정의 클래스(User Defined Class) vs 내장 클래스 (Built-In-Class)

 

이름과 나이를 가지는 학생이란 클래스를 만들어보면 다음과 같다. 

public class Student                             // 클래스 이름
{
   private String name;                          // 속성:Property:멤버필드
   private int age;

   public Student()                              // 생성자 :: 기본생성자
   {
   }
   
   public Student(String name, int age)          // 생성자 1
   {
      this.name = name;
      this.age  = age;
   }
   public void setName(String name)              // 기능:메소드:멤버함수
   {
      this.name = name;
   }
   public String getName()
   {
      return this.name;
   }
   public void setAge(int age)
   {
      this.age = age;
   }
   public String getName()
   {
      return this.name;
   }
}

 

이름과 나이 속성을 필드로 선언을 하고, 두 종류의 생성자를 호출한 모습이다.

 

생성자의 특징 : 클래스 명과 같은 이름을 가지고 반환타입이 없다. 

처음 선언된 생성자에는 매개변수가 없는데, 이는 기본 생성자라고 해서 클래스가 생성될 때(인스턴스화)

자동으로 호출이 되며, 

두 번째 생성자는 전달인자와 속성이 동일하기 때문에 자기 자신을 가르키는 this 키워드를 사용한 것이다. 

 

//객체 인스턴스화 (메모리 할당) 
Student s1 = new Student();

 

객체지향의 기초 요소 4가지

(1) 캡슐화(encapsulation) : 속성과 기능을 클래스 내부에 집어넣는 행위 (변수와 함수를 하나의 단위로 묶는 것.)
     1.1정보은닉(information hiding)
: private / protected / public (접근자 제한)

     프로그램의 세부 구현을 외부로 드러나지 않도록 모듈 내부에 감추는 것.

 

(2) 상속(inheritance)  : 클래스나 추상 클래스를 상속받는 행위

자식 클래스가 부모 클래스의 속성과 기능을 그대로 물려받는 것.

     2.1 오버로딩 vs 오버라이딩


 (3) 다형성(polymorphism)
: poly = multi, numerous; morph = form

   하나의 변수, 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 의미한다.
     (3.1) subtype polymorphism   (서브타입 다형성) - 메소드 오버라이딩
     (3.2) parametric polymorphism (매개변수 다형성) - 제네릭 메소드

     (3.3) ad-hoc polymorphism (임시 다형성) - 함수 오버로딩

     (3.4) coercion polymorphism (강제 다형성) - 묵시적(자동)/명시적(수동) 형변환


 (4) 직렬화(Serializtion) :
네트워크 상에서 전송되는 코드를 바이트 코드 형태로 변환해서 전송의 효율성 높임. 

     (4.1) 역직렬화(Deserializtion) : 전송받은 바이트 코드를 다시 객체화 시키는 작업.

 

 

 

 

 

+ Recent posts