현대의 스마트폰 사용자들에게 시계 앱은 필수 불가결한 도구입니다.
이에 따라 많은 개발자들이 시계 앱을 만들고, 다양한 기능을 추가하고 있습니다.
이 강좌에서는 자바로 안드로이드 앱을 개발하면서 스톱워치 기능을 구현하는 방법에 대해 자세히 알아보겠습니다.
1. 개발 환경 설정
스톱워치 앱을 개발하기 위해서는 Android Studio와 자바 개발 환경이 필요합니다.
아래 단계에 따라 개발 환경을 설정하세요.
-
Android Studio 다운로드 및 설치:
Android Studio는 공식적으로 지원되는 안드로이드 개발 도구입니다.
[Android Studio 다운로드 페이지](https://developer.android.com/studio)에서 최신 버전을 다운로드하고 설치합니다. -
새 프로젝트 생성:
Android Studio를 실행하고 “New Project”를 선택한 후, “Empty Activity”를 선택합니다.
프로젝트 이름은 “StopwatchApp”으로 설정하고, 자바를 선택하세요. -
Gradle 설정:
Gradle 빌드를 통해 필요한 라이브러리를 추가하고, SDK 버전을 설정합니다.
`build.gradle` 파일에서 `compileSdkVersion`과 `targetSdkVersion`을 적절하게 설정합니다.
2. UI 디자인하기
이제 스톱워치의 UI를 디자인하겠습니다. Android에서 XML을 사용하여 레이아웃을 정의합니다.
`activity_main.xml` 파일을 열고 아래와 같이 코드를 작성합니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txtTimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00:00:00"
android:textSize="48sp"
android:layout_centerInParent="true"/>
<Button
android:id="@+id/btnStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="시작"
android:layout_below="@id/txtTimer"
android:layout_marginTop="20dp"
android:layout_alignParentStart="true"/>
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="정지"
android:layout_below="@id/txtTimer"
android:layout_marginTop="20dp"
android:layout_toEndOf="@id/btnStart"
android:layout_marginStart="20dp"/>
<Button
android:id="@+id/btnReset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="리셋"
android:layout_below="@id/txtTimer"
android:layout_marginTop="20dp"
android:layout_toEndOf="@id/btnStop"
android:layout_marginStart="20dp"/>
</RelativeLayout>
UI는 중앙에 시간을 표시하는 `TextView`와 세 개의 버튼(시작, 정지, 리셋)을 포함합니다.
이 버튼을 통해 스톱워치의 기능을 제어할 수 있습니다.
3. 스톱워치 기능 구현
UI가 준비되었으면 이제 스톱워치의 기능을 구현할 차례입니다.
`MainActivity.java` 파일을 열고 아래와 같은 코드를 작성합니다.
package com.example.stopwatchapp;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView txtTimer;
private Button btnStart, btnStop, btnReset;
private long startTime = 0L;
private boolean isRunning = false;
private final Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtTimer = findViewById(R.id.txtTimer);
btnStart = findViewById(R.id.btnStart);
btnStop = findViewById(R.id.btnStop);
btnReset = findViewById(R.id.btnReset);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isRunning) {
startTime = SystemClock.elapsedRealtime();
handler.postDelayed(runnable, 0);
isRunning = true;
}
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRunning) {
handler.removeCallbacks(runnable);
isRunning = false;
}
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(runnable);
txtTimer.setText("00:00:00");
isRunning = false;
}
});
}
private final Runnable runnable = new Runnable() {
@Override
public void run() {
long elapsedMillis = SystemClock.elapsedRealtime() - startTime;
int seconds = (int) (elapsedMillis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
int hours = minutes / 60;
minutes = minutes % 60;
txtTimer.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
handler.postDelayed(this, 1000);
}
};
}
위 코드는 스톱워치의 기본적인 기능을 담고 있습니다.
`Handler`를 사용하여 주기적으로 경과 시간을 업데이트합니다.
- 시작 버튼: 스톱워치를 시작하고 시간을 카운트하기 시작합니다.
- 정지 버튼: 스톱워치를 정지시키고 현재 시간을 유지합니다.
- 리셋 버튼: 스톱워치를 초기화하고 시간을 “00:00:00″으로 표시합니다.
4. 앱 테스트하기
이제 스톱워치 앱을 테스트할 차례입니다. Android Studio에서 “Run” 버튼을 클릭하여
에뮬레이터에서 앱을 실행합니다. 버튼을 클릭하여 스톱워치 기능이 정상적으로 동작하는지 확인하세요.
다양한 시나리오를 테스트하여 모든 기능이 정상적으로 작동하는지 테스트하는 것이 중요합니다.
5. 추가 기능 구현
기본 스톱워치 기능 외에도 사용자 경험을 향상시키기 위해 추가 기능을 고려할 수 있습니다.
예를 들어, lap 기능, 알림 기능 또는 사용자 설정을 추가하는 방법을 생각해 볼 수 있습니다.
-
Lap 기능:
사용자에게 경과 시간을 기록할 수 있는 기능을 추가하여 여러 회의의 시간을 기록할 수 있도록 합니다. -
소리 알림:
사용자가 스톱워치를 시작하고 종료할 때 소리가 나게 하여 피드백을 제공합니다. -
테마 설정:
사용자에게 앱의 색상이나 글자체를 변경할 수 있는 옵션을 제공합니다.
이러한 기능은 앱의 품질을 높이고 사용자 만족도를 향상시킬 수 있습니다.
6. 결론
이번 강좌를 통해 자바를 활용하여 안드로이드 스톱워치 앱을 개발하는 방법을 배웠습니다. 개발 환경을 설정하고,
UI를 디자인하며, 기능을 구현하는 과정을 통해 안드로이드 앱 개발의 기초를 익히는 계기가 되었기를 바랍니다.
앞으로 더 많은 기능을 추가하거나 자신만의 스타일로 앱을 발전시켜 나가는 여정을 이어가시길 바랍니다.