본문 바로가기
Android

안드로이드 프로젝트 구조와 컴포넌트

by 아도리 2023. 2. 21.

안드로이드 프로젝트 구조와 컴포넌트(component)를 이해하는 것은 모든 안드로이드 개발자에게 매우 중요합니다. 

잘 구성된 프로젝트 구조는 개발자가 코드를 쉽게 탐색하고 관리하는 데 도움이 되며, 컴포넌트는 안드로이드 애플리케이션의 구성 요소입니다. 

이 글에서는 예제 코드를 통해 안드로이드 프로젝트 구조와 다양한 컴포넌트를 살펴보겠습니다.

안드로이드 프로젝트 구조(Android Project Structure)
안드로이드 프로젝트 구조는 개발자가 코드를 쉽게 탐색하고 관리할 수 있도록 특정 방식으로 구성되어 있습니다. 프로젝트 구조의 다양한 구성 요소를 살펴보겠습니다.

1. Gradle Scripts
Gradle은 안드로이드 애플리케이션의 빌드, 테스트 및 배포를 자동화하는 데 사용되는 빌드 시스템입니다. Gradle 스크립트 폴더에는 빌드 프로세스를 구성하는 데 사용되는 build.gradle 및 settings.gradle의 두 파일이 있습니다.

2. Manifests
AndroidManifest.xml 파일은 안드로이드 애플리케이션의 핵심입니다. 여기에는 패키지 이름, 애플리케이션을 구성하는 활동, 애플리케이션에 필요한 권한 및 기타 중요한 정보와 같은 애플리케이션에 대한 중요한 정보가 포함되어 있습니다.

3. Java
Java 폴더에는 Android 애플리케이션의 모든 Java 코드가 들어 있습니다. 개발자가 코드를 쉽게 탐색하고 관리할 수 있도록 패키지로 구성되어 있습니다.

4. Res
Res 폴더에는 레이아웃, 문자열, 색상 및 이미지와 같이 Android 애플리케이션에서 사용하는 모든 리소스가 포함되어 있습니다. 또한 개발자가 리소스를 쉽게 탐색하고 관리할 수 있도록 하위 폴더로 구성되어 있습니다.

5. Assets
Assets 폴더는 원시 오디오 또는 비디오 파일과 같이 애플리케이션에 컴파일되지 않은 파일을 저장하는 데 사용됩니다.

안드로이드 컴포넌트(Android Component)
이제 안드로이드 프로젝트 구조를 살펴보았으니 안드로이드 애플리케이션을 구성하는 다양한 컴포넌트를 살펴보겠습니다.

1. Activities
Activity는 사용자가 집중적으로 수행할 수 있는 단일 작업입니다. 예를 들어 이메일 애플리케이션에는 이메일 목록을 표시하는 액티비티와 새 이메일을 작성하는 액티비티가 있을 수 있습니다.

다음은 메시지를 표시하는 Activity의 예제 코드입니다.

public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        TextView messageTextView = findViewById(R.id.message_text_view);
        messageTextView.setText("Hello, World!");
    }
}

2. Fragments
Fragment는 활동의 사용자 인터페이스에서 재사용 가능한 부분입니다. Fragment는 일반적으로 여러 activity에서 재사용되는 UI 요소를 만드는 데 사용됩니다.

다음은 list를 표시하는 fragment의 예제 코드입니다.

public class ItemListFragment extends Fragment {
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_item_list, container, false);
 
        // Populate the list with items
        ListView listView = view.findViewById(R.id.item_list_view);
        String[] items = {"Item 1", "Item 2", "Item 3"};
        ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(),
                android.R.layout.simple_list_item_1, items);
        listView.setAdapter(adapter);
 
        return view;
    }
}

3. Services
Service는 백그라운드에서 실행되어 장기간 실행되는 작업을 수행하는 컴포넌트입니다. Service는 일반적으로 인터넷에서 데이터를 다운로드하거나 음악을 재생하는 등 사용자 상호 작용이 필요하지 않은 작업을 수행하는 데 사용됩니다.

다음은 음악을 재생하는 service 코드 예시입니다.

public class MusicService extends Service {
 
    MediaPlayer mediaPlayer;
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
 
        // Initialize the media
        mediaPlayer = MediaPlayer.create(this, R.raw.song);
        // Start playing the music
        mediaPlayer.start();

        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        // Stop the music
        mediaPlayer.stop();
        mediaPlayer.release();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
	}
}

4. Broadcast Receivers

Broadcast Receiver는 시스템 전체의 이벤트나 Broadcast 를 수신하는 컴포넌트입니다. Broadcast Receiver는 일반적으로 배터리가 부족하거나 문자 메시지가 수신되었을 때와 같은 알림을 수신하는 데 사용됩니다.

다음은 알림을 수신하는 Broadcast Receiver의 예제 코드입니다.

public class NotificationReceiver extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
 
        // Create the notification
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "channel_id")
                .setSmallIcon(R.drawable.notification_icon)
                .setContentTitle("My Notification")
                .setContentText("This is my notification.")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);
 
        // Show the notification
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.notify(1, builder.build());
    }
}

5. Content Providers
Content Provider는 연락처나 음악 파일과 같은 공유 데이터 집합을 관리하는 컴포넌트입니다. Content Provider는 일반적으로 서로 다른 애플리케이션 간에 데이터를 공유하는 데 사용됩니다.

다음은 연락처 목록을 관리하는 content Provider의 코드 예시입니다.

public class ContactContentProvider extends ContentProvider {
 
    private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
 
    static {
        uriMatcher.addURI("com.example.contacts.provider", "contacts", 1);
    }
 
    private List<String> contacts;
 
    @Override
    public boolean onCreate() {
 
        // Initialize the list of contacts
        contacts = new ArrayList<>();
        contacts.add("Alice");
        contacts.add("Bob");
        contacts.add("Charlie");
 
        return true;
    }
 
    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
                        @Nullable String[] selectionArgs, @Nullable String sortOrder) {
 
        if (uriMatcher.match(uri) == 1) {
 
            // Create a cursor with the list of contacts
            MatrixCursor cursor = new MatrixCursor(new String[]{"name"});
            for (String contact : contacts) {
                cursor.addRow(new Object[]{contact});
            }
            return cursor;
        } else {
            throw new IllegalArgumentException("Invalid URI");
        }
    }
 
    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }
 
    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        return null;
    }
 
    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }
 
    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection,
                      @Nullable String[] selectionArgs) {
        return 0;
    }
}

결론
이 글에서는 안드로이드 프로젝트 구조와 다양한 컴포넌트를 예제 코드를 통해 살펴보았습니다. 프로젝트 구조와 컴포넌트를 이해하는 것은 체계적이고 효율적인 애플리케이션을 만드는 데 도움이 되므로 모든 안드로이드 개발자에게 매우 중요합니다. 이 포스팅을 통해 안드로이드 프로젝트 구조와 다양한 컴포넌트를 이해하는 데 도움이 되셨기를 바랍니다.

댓글