멍멍이네 블로그

체감상 해결됐던 플레이 스토어에서 앱 업데이트 버튼이 안 뜨는 오류 고치는 방법에 대해 설명드리겠습니다.

(생략하실 분들은 맨 밑을 봐주세요!)

 

* 주의 : 이 모든 것은 개인적인 추측과 체감상 해결방법에 대한 내용이므로, 100% 확신이 있는 것은 아니며, 다만 비슷한 오류가 있는 분들에게 도움이 되고자 합니다.

 

* 누구 때문에 생길 수 있을까?

개발사(퍼블리셔), 구글(스토어) 등

 

* 어떤 경우에 이러한 문제가 생길 것인가?(오직 작성자의 개인적인 추측으로만 이루어져 있습니다.)

스토어에서 업데이트 버튼이 안 뜰 경우 왜 그럴까 생각해보았습니다.

많은 분들이 플레이 스토어에 등록하는 개발사에 모든 책임을 씌우지만, 아닐 경우도 존재한다는 것이죠.

 

앱에서 업데이트하고, 서버에 업데이트 버전 올려놨는데, 플레이 스토어에서 업로드가 안 됐을 때(검수 시간 등으로 인한 지연) 버전이 일치하지 않을 수 있겠죠.

-> 이런 경우 업데이트 이후 접속하면 됩니다. (지금까지 한두번 빼고는 본 적이 없는 문제죠)

 

혹은 기존에 스토어를 켜놓아서 제대로 인식을 못 했을 수 있죠.

-> 이런 경우 스토어를 완전히 종료한 후 실행하면 됩니다.

 

최근 자주 생기는 문제는, 해당 기기의 스토어에서 앱이 업데이트 됐는지 인식을 못 하더라구요~

-> 구글 플레이 서비스 or Google Play 서비스에서 모든 데이터 삭제 후 구글 플레이를 실행해보세요!

이렇게 하면, 서버 정보를 다시 읽어오는 것인지, 바로 업데이트 버튼이 보이더라구요! 

 

이밖에 해보진 않았지만, 구글 플레이 서비스가 아닌 구글 플레이 스토어의 데이터를 삭제 후 하면 된다고도 합니다.

 

 

* 요약 : 글 작성자의 추천 방법 순서

1. 한번 완전히 종료 후 실행. 백그라운드에서도 완전히 꺼준다.

(대부분 여기서 해결 됨)

2. 해당 앱과 구글 플레이 스토어를 종료한 후 "Google Play 서비스"(기기별로 한글 혹은 영어일 수 있습니다.) 앱의 모든 데이터 삭제를 누른 후 다시 실행.

(여기까지 온 경우 해결 안 된 경우는 못 봤습니다.)

 

이 글이 많은 분들께 도움이 됐으면 좋겠네요.

class A를 선언한 스크립트,
class B 선언한 스크립트가 있을때


[RequireComponent(typeof(A))]
class B
{

}


이렇게 class B를 선언하기 전에 RequireComponent시키면 class A가 어태치된다

 

--------------------------------------------------

 

class Test
{
      public int number;
     
      public Test(int n)
      {
            number = n;
       }
}

위와 같은 클래스가 있을 때,

 

void main()
{
      Test t;
      Test t1(5);

      cout « t.number;
      cout « t1.number
      t = 10;
      coun « t.number;
}

 

문제1. cout으로 number를 출력하고 있는데 C#과 C++에서는 값이 어떻게 나오는지 써보시오.

 

C++일 경우 0 5 10 나온다.

C#일 경우 C#일 경우 t = 10에서 에러 호출낸다.

 

문제2. 그러면 C++에서 t = 10; 구문을 t = 10.0; 으로 바꿀 경우 어떻게 될까?

 

위와 같이 출력됨.

 

 

 

문제 1과 2의 이유

C#은 암시적형변환을 안해줘서 무조건 형이 다르면 에러를 띄우고, C++ 특성 상 암시적 형변환이 발동돼서 값을 받는게 실수형의 생성자가 없어서 컴파일러가 암시적으로 int형으로 형변환 시켜버려서 호출되는것이다.

 

----------------------------------------------------------------------------

 

그럼 내가 생성자에서 int형을 받는데 무조건 int형만 받을려고 할려면 생성자를 어떻게 해야될까??

생성자를 만들때

 

public explicit Test(int n)

 

이렇게 explicit 이 키워드를 사용하면 매개변수 타입이 현재 int형인데 float형이 들어오면 오류를 띄우게 하는거

무조건 int형만 받겠다는 의미로 이 키워드를 사용한 메소드는 암시적 형변환을 시도 안하겠다는 의미로 사용하는것이다.

 

하지만 강제적 형변환으로 해서 접근할 수 있다.

 

explicit Print(int n) { n을 받아서 출력 }

 

Print(10) 이렇게 하면 10을 호출하겠지만, 만약에 Print(10.5) 라고 써야될 경우

 

Print((int)10.5)

 

강제적 형변환을 해서 넘겨주면 된다.

virtual과 abstract의 차이는 추상클래스 혹은 메소드를 만듬에 사용처가 다르다.

 

virtual같은 경우 상위 부모클래스에서 만든 메소드 중에서 하위 클래스로 갈 공용적인 메소드에 주로 사용한다.

RPG게임에서 PC와 몬스터, PC와 NPC 등 이 있을 경우, 공통적으로 있는 손, 발, 몸 등 에 해당하는 부분이다.

 

abstract는 공용이되 선언만 해놓고 필요할 때 사용하려고 만들어놓는것이다.

동물이라는 클래스를 만들 때 동물마다 울음소리, 울음주기 등이 다른데, 그에 해당하는 부분에 넣는것이다.

오버라이딩( = 함수 재정의)

- 함수를 입맛에 맞게 재정의 해서 사용함.

주로 추상클래스로 만들어서 사용함.

 

오버로딩( = 함수 중복)

- 함수를 중복(이름 동일)하게 정의함(매게변수만 다르게)

  매게변수가 다를 경우 다른 메소드로 인식함.

ex)

public void text(int a){

}

 

public void text(int a, int b){

}

 

*추상클래스 = 함수명으로 메소드를 만들 되 함수를 정의하지 않음으로 사용할 수 없는 메소드를 정의하지만,  나중에 정의가 가능하도록 만듬. 주로 상속 등에 사용됨.