API란?

응용 프로그램 프로그래밍 인터페이스로써, 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

주로 파일제어, 창제어, 화상처리, 문자제어 등을 위한 인터페이스를 제공한다.

그렇다면 인터페이스란?

기본 설계도라고 할 수 있는, 일종의 추상 클래스임

추상 클래스와 같이 추상 메소드를 가지지만, 추상 클래스보다 추상화 정도가 높다.

일반 메소드, 멤버 변수를 구성원으로 가질수 없고, 추상 메소드와 상수만을 멤버로 가질수가 있다.

- 인터페이스 작성

interface 인터페이스이름

 public static final 타입 상수이름 = 값;

 public abstract 메소드 이름 (매개변수 목록);

모든 멤버변수는 public static final 이어야 하며, 이를 생략 할 수 있다.

모든 메소드는 public abstract 이어야 하고, 생략이 가능하다.

출처 : https://ithub.tistory.com/3

- 인터페이스의 장점

1. 개발시간을 단축 할 수 있다.

2. 표준화가 가능하다

3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.

4. 독립적인 프로그래밍이 가능하다.

Posted by 팡다츄
,

1.유니티에서의 안드로이드  
mono와 il2cpp 방식의 차이 

2. 유니티의 렌더링 파이프 라인의 방식 

3. 가비지콜렉터의 동작원리 

4. 코루틴의 yiled return의 종류 

5. 유니티의 프로파일러 

7. 유니티의 NGUI와 UGUI 

8. Finite State Machine. 

9.이진 바이너리 트리 

10. 객체지향과 절차지향의 차이 

11. 추상클래스란? 

12. 오버로딩과 오버라이딩

Posted by 팡다츄
,

값 형식과 참조 형식의 차이

[값형식]

-메모리의 Stack에 할당된다.

-변수에 값이 직접 저장됨.(Stack)

-기본 생성자는 예약되어 있음.

(Object와 String을 제외한 모든 형식은 값 기반 형식임)

[참조형식]

-메모리의 Heap에 할당된다.

-Stack의 변수가 Heap의 데이터 내용을 참조하여 저장한다.

=> 두 기반 형식의 가장 큰 차이점은 참조기반 형식은 Heap에 할당이 되고, 

값 기반 형식은  Stack에 할당이 된다는 것임.

Heap은 객체를 할당하여, 사용하지 않을 때 제거될 수 있으며,

Stack은 { } 블록 범위에서 메모리가 할당과 해제된다.

박싱과 언박싱 

1) 박싱(boxing)

값 타입을 Object 형식 또는 이 값 형식에서 구현된 임의의 인터페이스 형식으로 변환하는 것

기존에 저장된 Stack 영역에서 Heap 영역에 값 형식을 저장한다.

이처럼 int 값 형식의 변수를 Object라는 참조 형식으로 형 변환 하는 것.

그 목적은?

보통 파라미터로 전달이 되거나 List<Object> 형식으로 모든 값들을 입력받는 목적으로도 사용함

위 작성한 코드는 메모리상에서 아래와 같이 할당됨.

출처 : https://hongjinhyeon.tistory.com/90

스택 영역에 있는 i 값이 o로 변환 되면서 object 형식으로 선언이 되고, 값이 복사가 된다.

박싱은 보통 암시적으로 되며, 명시적으로도 가능하다.

[박싱의 과정]

1. 값 타입을 Heap에 생성하기 위해 메모리를 Heap 영역에 생성함.

2. 값을 Heap 영역에 할당된 메모리로 복사

3. 참조할 변수에 할당된 메모리 주소를 할당

1) 언박싱(unboxing)

Object 형식에서 값 형식으로, 또는 인터페이스 형식에서 해당 인터페이스를 구현하는 값 형식으로 변환하는 것.

[언박싱의 과정]

1. 개체 인스턴스가 지정한 값 형식을 박싱된 값인지 확인한다.

2. 박싱된 값이라면 값 타입 변수에 복사한다.

3. 박싱한 메모리와 언박싱한 메모리 2개 존재 (가비지 발생)

-> 모든 객체는 값 형식으로 언박싱 될 수 없고, 이전에 박싱이 된 데이터에 한하여 언박싱이 가능하다.

또한, 박싱하기 이전의 타입을 따라야 한다.

출처 : https://hongjinhyeon.tistory.com/90

위 그림에서 int를 박싱한 o의 객체를 다시 int 타입의 j 값에 넣고 있음.

-> 언박싱을 할 때 다른 타입으로 하거나, 해당 타입보다 작은 범위로 변환을 하면 오류가 발생한다.

이 때는 미리 같은 타입인지를 먼저 확인하는 절차를 거쳐야 한다.

is 연산자를 이용해서 미리 같은 타입인지 확인 후에 캐스팅을 해야 안전하다.

=> 박싱과 언박싱에는 많은 시간이 소모된다.

되도록이면 제네릭을 사용해서 박싱과 언박싱이 일어나지 않도록 구성을 해야하며, 사용한다면

그 타입에 맞는 캐스팅을 해서 오류가 없이 처리해야 할 것임.

 

Posted by 팡다츄
,