codememo

정적 클래스, 인터페이스 또는 xml 리소스 중에서 안드로이드에서 상수를 정의하는 가장 좋은 방법은 무엇입니까?

tipmemo 2023. 10. 20. 13:43
반응형

정적 클래스, 인터페이스 또는 xml 리소스 중에서 안드로이드에서 상수를 정의하는 가장 좋은 방법은 무엇입니까?

저는 웹 서비스를 이용하여 서버에서 데이터를 가져오는 안드로이드 어플리케이션을 개발하고 있습니다. 포인트 개발 시스템, 테스트 서버, 라이브 서버까지 3개의 다른 URL을 가지고 있습니다.테스트/라이브를 위한 어플리케이션을 주고 싶을 때마다 URL을 변경하는 것이 어렵기 때문에, 빌드 타입 설정 상수를 기반으로 적절한 URL을 얻을 수 있도록 구성 가능하게 하려고 계획하였습니다.

  • java static class 또는 java public interface 또는 xml resource file 중 어느 것이 이 상수를 유지하는 가장 좋은 방법입니까?언제? 왜?
  • 어떤 것이 더 나은 성능을 제공합니까?언제? 왜?

Ex: xml 리소스

<integer name="config_build_type">0</integer>
<string-array name="url_authentication">
    <item >http://development.com/xxxx</item>
    <item >http://test.com/xxx</item>
    <item >http://example.com/xxx</item>
</string-array>

자바 정적 상수

public class Config {
    public static final int BUILD_TYPE = 0; // 0 - development, 1 - test, 2 - live
    public static final String[] URL_AUTHENTICATION = {"http://development.com/", "http://test.com/", "http://example.com"};
}

XML 레이아웃에서 프로젝트 리소스를 참조할 수 있다는 점에서 둘 사이에는 큰 차이가 있습니다.애플리케이션 컨텍스트에서 사용할 수 있으므로 글로벌 애플리케이션 전체에서 액세스할 수 있습니다.프로젝트 리소스를 사용할 때 가장 큰 장점은 액세스가 용이하고 프로젝트를 크게 구성할 수 있다는 점입니다.

static final상수는 자바 바이트 코드로 컴파일되고 프로젝트 리소스는 apk 내에서 이진 형식으로 컴파일됩니다.둘 중 하나에 접근하는 것이 매우 효율적입니다...그 둘 사이에 차이가 있다면, 기껏해야 사소한 것일 뿐입니다.

프로젝트에서 리소스/상수를 어떻게 사용해야 하는지에 대한 정해진 규칙은 없습니다.즉, 개인적으로 XML이나 자바 코드에서 사용해야 할 값에 리소스를 사용합니다.반면에 제가 주로 사용하는 것은static final자바 코드에서만 사용되며 구현에 고유한 값의 상수입니다.

또한 장치의 현재 구성(예: 화면 크기, 로케일 등)에 따라 런타임에 XML 리소스를 로드할 수 있습니다.따라서 XML로 상수를 선언할지 또는 직접 선언할지 여부를 결정할 때 이를 고려해야 합니다..java서류철

클래스를 사용하여 상수를 정의하고 필요한 곳에 전화를 걸 수 있는 방법을 알고 싶은 분들을 위한 것입니다.

상수.자바

    package org.nrum.nrum;

/**
 * Created by rajdhami on 5/23/2017.
 */
public class Constant {
    public static final String SERVER = "http://192.168.0.100/bs.dev/nrum";
//    public static final String SERVER = "http://192.168.100.2/bs.dev/nrum";
    public static final String API_END = SERVER + "/dataProvider";
    public static final String NEWS_API = API_END + "/newsApi";
    public static final String BANNER_API = API_END + "/bannerApi/lists";
    public static final String NOTICE_API = API_END + "/noticeApi/lists";
    public static final String UPLOAD_PATH = SERVER + "/uploads";
    public static final String UPLOAD_PATH_BANNER = UPLOAD_PATH + "/company_1/banner";
    public static final String UPLOAD_PATH_NEWS = UPLOAD_PATH + "/company_1/news";
    public static final int BANNER_TRANSITION_DURATION = 5000;
    public static final int NOTICE_BUTTON_BLINK_DURATION = 5000;
    public static final int BANNER_FETCH_LIMIT = 3;
}

이제 위의 상수를 다음과 같은 방법으로 사용할 수 있습니다.

Constant.NOTICE_BUTTON_BLINK_DURATION

일반적인 경우:

  • XML 값은 자바 파일의 상수보다 레이아웃 파일 및 매니페스트 파일의 접근성이 우수합니다.
  • XML 값은 자바 파일의 상수보다 여러 언어를 지원할 수 있는 장점이 있습니다.

앱 코드에서 UI 문자열을 추출하여 외부 파일에 보관하는 것이 항상 좋은 방법입니다.Android는 각 Android 프로젝트의 리소스 디렉토리로 이를 쉽게 만듭니다.

http://developer.android.com/training/basics/supporting-devices/languages.html

저는 두 가지 방법 모두 좋을 것 같지만, 고객님의 요구에 따라 결정된다는 것이 중요합니다.

XML에 사용자의 값(웹 서비스 링크)이 있고 사용자의 값(웹 서비스 링크)에 변경이 있다고 가정하면 XML 파일에서만 쉽게 변경할 수 있습니다.

그러나 내부 클래스를 정적 변수로 사용할 경우 모든 클래스 파일에서 변경해야 합니다.

그래서 제 제안은 소스 파일에서 상수를 분리하여 리소스에 넣고 액세스하는 것입니다.

상수가 관련되거나 로케일이나 언어에 의존하거나 매니페스트에서 사용되는 경우 xml 값을 사용하는 것을 고려할 수 있습니다.

상수가 번역이나 로케일, 매니페스트에서의 사용과 관련이 없다면 xml 리소스에 넣지는 않을 것입니다.

저는 뷰 모델 안에 열거나 상수를 키로 사용해야 하는 것을 추가할 것입니다.

enum class Key{
        key,rule,practice
    }

아니면

const val MY_CONST = "my constant"

코틀린에서:

class Foo() { 
    // any other code for the class Foo 

    companion object {
        const val MY_CONSTANT = "my constant"
    }
} 

이 방법은 데이터 개체에 특히 권장됩니다.

프로젝트 리소스에는 컨텍스트에 대한 액세스 권한이 필요합니다. 컨텍스트는 전달하지 않는 한 정적 메서드에서는 사용할 수 없지만 활동에서는 항상 사용할 수 있습니다. 즉, 리소스와 레이아웃 사이에 우선적인 연결이 있는 것 같습니다.

정적인 방법으로 처리할 수 있는 앱 변수와 상수의 경우, 추상 클래스를 만들고 다른 모든 프로젝트 클래스 파일에서 (이 상수 클래스의) 정적 가져오기를 수행합니다.

언급URL : https://stackoverflow.com/questions/11150701/which-is-best-way-to-define-constants-in-android-either-static-class-interface

반응형