자바 안드로이드 앱개발 강좌, 뉴스 앱 만들기

안녕하세요! 오늘은 안드로이드 앱을 개발하는 흥미로운 여정을 시작해 보겠습니다. 본 강좌에서는 자바를 활용하여 간단한 뉴스 앱을 만드는 과정을 단계별로 설명할 것입니다. 여러분이 앱 개발에 대한 깊은 이해를 갖게 되길 바라며, 이 강좌를 통해 유용한 기술들을 배우시기 바랍니다.

1. 앱 기획 및 요구사항 분석

뉴스 앱을 만들기 전에 우선 앱의 주요 기능과 요구사항을 정리해 보겠습니다. 다음은 기본 요구사항 목록입니다:

  • 뉴스 목록을 보여준다.
  • 각 뉴스 항목을 클릭할 수 있어야 한다.
  • 뉴스의 상세 내용을 볼 수 있어야 한다.
  • 뉴스 기사는 인터넷에서 API를 통해 가져온다.

2. 개발 환경 설정

앱 개발을 위해 먼저 Android Studio를 다운로드하고 설치해야 합니다. Android Studio는 공식 안드로이드 IDE로, 다양한 기능을 제공합니다. 아래의 단계에 따라 환경을 설정해보세요:

  1. Android Studio를 공식 웹사이트에서 다운로드하여 설치합니다.
  2. 설치 후 새로운 프로젝트를 생성합니다.
  3. 프로젝트 템플릿에서 ‘Empty Activity’를 선택합니다.
  4. 프로젝트 이름을 ‘NewsApp’으로 설정하고, 언어는 ‘Java’를 선택합니다.
  5. 마무리 후 프로젝트가 생성되면, 왼쪽의 파일 탐색기에서 ‘app/src/main’ 디렉토리로 이동합니다.

3. API 선택하기

뉴스 데이터를 가져오기 위해 사용할 수 있는 여러 뉴스 API가 있습니다. 여기서는 ‘News API’를 사용하여 데이터를 가져올 예정입니다. 뉴스 API를 사용하려면 API 키가 필요합니다. 다음과 같은 절차를 진행하세요:

  1. News API 웹사이트에 가입합니다.
  2. API 키를 생성합니다.
  3. 받은 API 키를 안전하게 저장합니다.

4. 의존성 추가하기

Android Studio에서 Gradle을 사용하여 쉽게 의존성을 추가할 수 있습니다. 뉴스 API에 접근하기 위해 ‘Retrofit’과 ‘Gson’ 라이브러리를 사용할 것입니다. 아래의 코드를 ‘build.gradle (Module: app)’ 파일에 추가해주세요:


dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}
        

5. 모델 클래스 생성하기

뉴스 데이터를 처리하기 위해 모델 클래스를 정의할 필요가 있습니다. ‘Article’이라는 클래스를 생성하겠습니다. 프로젝트의 ‘java’ 디렉토리 아래 ‘model’ 패키지를 생성하고, 그 안에 ‘Article.java’ 클래스를 만들어주세요.


package com.example.newsapp.model;

public class Article {
    private String title;
    private String description;
    private String url;
    private String urlToImage;

    // Getters and Setters
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrlToImage() {
        return urlToImage;
    }

    public void setUrlToImage(String urlToImage) {
        this.urlToImage = urlToImage;
    }
}
        

6. Retrofit 설정하기

Retrofit을 사용하여 API와 통신하기 위해 Service 클래스를 생성해야 합니다. ‘api’라는 패키지를 생성하고 그 안에 ‘NewsApiService.java’ 파일을 만들어보세요.


package com.example.newsapp.api;

import com.example.newsapp.model.Article;
import com.example.newsapp.model.NewsResponse;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface NewsApiService {
    @GET("top-headlines")
    Call getTopHeadlines(
            @Query("apiKey") String apiKey,
            @Query("country") String country
    );
}
        

7. 뉴스 응답 모델 생성하기

API에서 반환되는 JSON 데이터를 매핑하기 위해 ‘NewsResponse’라는 클래스를 만들어야 합니다. 앞서 생성한 ‘model’ 패키지 안에 ‘NewsResponse.java’ 클래스를 생성합니다.


package com.example.newsapp.model;

import java.util.List;

public class NewsResponse {
    private String status;
    private List
articles; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public List
getArticles() { return articles; } public void setArticles(List
articles) { this.articles = articles; } }

8. MainActivity 구현하기

이제 MainActivity를 구현하여 API에서 뉴스를 가져오고 사용자에게 보여줄 준비를 합니다. ‘MainActivity.java’ 파일을 열고 다음 코드를 작성하세요.


package com.example.newsapp;

import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

import com.example.newsapp.api.NewsApiService;
import com.example.newsapp.model.NewsResponse;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {
    private static final String BASE_URL = "https://newsapi.org/v2/";
    private static final String API_KEY = "YOUR_API_KEY"; // API 키 입력

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        loadNews();
    }

    private void loadNews() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        NewsApiService newsApiService = retrofit.create(NewsApiService.class);
        Call call = newsApiService.getTopHeadlines(API_KEY, "kr");
        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                if (response.isSuccessful()) {
                    // 뉴스 데이터 처리
                } else {
                    Toast.makeText(MainActivity.this, "뉴스를 가져오는 데 실패했습니다.", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                Toast.makeText(MainActivity.this, "네트워크 오류: " + t.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }
}
        

9. 뉴스 목록 보여주기

뉴스 목록을 보여주기 위해 RecyclerView를 사용합니다. ‘res/layout’ 폴더에 ‘item_article.xml’ 레이아웃 파일을 생성하고 다음 코드를 작성해 주세요.





    

    

        

10. RecyclerView 어댑터 만들기

RecyclerView를 사용하기 위해 어댑터 클래스를 작성해야 합니다. ‘adapter’라는 패키지를 생성하고 ‘ArticleAdapter.java’ 파일을 만들어 주세요.


package com.example.newsapp.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.newsapp.R;
import com.example.newsapp.model.Article;
import java.util.List;

public class ArticleAdapter extends RecyclerView.Adapter {
    private List
articleList; static class ArticleViewHolder extends RecyclerView.ViewHolder { TextView textTitle; TextView textDescription; ArticleViewHolder(View itemView) { super(itemView); textTitle = itemView.findViewById(R.id.textTitle); textDescription = itemView.findViewById(R.id.textDescription); } } public ArticleAdapter(List
articleList) { this.articleList = articleList; } @NonNull @Override public ArticleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_article, parent, false); return new ArticleViewHolder(view); } @Override public void onBindViewHolder(@NonNull ArticleViewHolder holder, int position) { Article article = articleList.get(position); holder.textTitle.setText(article.getTitle()); holder.textDescription.setText(article.getDescription()); } @Override public int getItemCount() { return articleList.size(); } }

11. RecyclerView 초기화 및 데이터 설정하기

MainActivity에서 RecyclerView를 초기화하고, API를 통해 가져온 데이터를 어댑터에 설정합니다. ‘MainActivity.java’를 수정하여 다음과 같이 업데이트 합니다.


import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

private RecyclerView recyclerView;
private ArticleAdapter articleAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    loadNews();
}

private void loadNews() {
    ...
    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call, Response response) {
            if (response.isSuccessful()) {
                articleAdapter = new ArticleAdapter(response.body().getArticles());
                recyclerView.setAdapter(articleAdapter);
            } else {
                ...
            }
        }
        ...
    });
}
        

12. MainActivity 레이아웃 파일 수정하기

마지막으로 MainActivity의 레이아웃 파일을 수정하여 RecyclerView를 추가합니다. ‘res/layout/activity_main.xml’ 파일을 수정하여 다음과 같이 작성합니다.





    

        

13. 사용해보기 및 마무리

이제 모든 설정이 완료되었습니다! 앱을 실행해보면 최신 뉴스 기사를 목록으로 확인할 수 있습니다. API에서 가져온 데이터를 통해 사용자에게 유용한 정보를 제공하는 간단한 뉴스 앱이 완성되었습니다.

14. 추가 기능 구현하기

이번 강좌에서는 기본적인 뉴스 앱을 만드는 과정을 배우았습니다. 더 나아가 다음과 같은 추가 기능들을 구현해보세요:

  • 뉴스 상세 페이지 구현하기
  • 뉴스 기사 검색 기능 추가하기
  • 즐겨찾기 기능 추가하기
  • 다양한 뉴스 카테고리 추가하기

15. 결론

뉴스 앱 만들기를 통해 자바와 안드로이드의 기본적인 사용법을 익힐 수 있었습니다. 앞으로 더 많은 앱을 개발하면서 실력을 키워나가시길 바랍니다. 질문이나 의견이 있으신 분들은 댓글로 남겨주세요!