🍥구현 기능
🍥구현하기
User 클래스
data class User(
val ID: String,
val password: String,
var name: String,
var profileImage: Uri? = null,
var introduction: String = "",
var character: MutableList<String> = mutableListOf<String>(),
val writtenPostIDList: MutableList<Int> = mutableListOf<Int>(),
val likedPostIDList: MutableList<Int> = mutableListOf<Int>()
) {
fun addWrittenPostID(postID: Int) {
writtenPostIDList.add(postID)
}
fun isInLikedPostIDList(postID: Int): Boolean {
return likedPostIDList.contains(postID)
}
fun addLikedPostID(postID: Int) {
likedPostIDList.add(postID)
}
fun deleteLikedPostID(postID: Int) {
likedPostIDList.remove(postID)
}
}
UserManager 클래스
- 회원 정보를 관리하기 위한 클래스
- 싱글톤 패턴으로 구현
class UserManager private constructor() {
private val userList = mutableListOf<User>()
companion object {
private var instance: UserManager? = null
fun newInstance(): UserManager {
if (instance == null) instance = UserManager()
return instance!!
}
}
init {
addNewUser("hong_gildong", "aaaaaaaa!", "홍길동")
addNewUser("kim_chulsoo", "aaaaaaaa!", "김철수")
addNewUser("lee_younghee", "aaaaaaaa!", "이영희")
}
fun addNewUser(
ID: String, password: String, name: String,
image: Uri? = null,
introduction: String = "",
personality: MutableList<String> = mutableListOf<String>()
) {
userList.add(User(ID, password, name, image, introduction, personality))
}
fun findUserByID(ID: String): User? {
return userList.find { it.ID == ID }
}
fun checkUserExist(id: String): Boolean {
return userList.any { it.ID == id }
}
fun isLoginSuccess(ID: String, password: String): Boolean {
userList.forEach {
if ((it.ID == ID) && (it.password == password)) return true
}
return false
}
fun changeUserInfo(
id: String,
newName: String,
newIntro: String,
newCharacter: MutableList<String>,
newProfileImage: Uri?
) {
findUserByID(id)?.name = newName
findUserByID(id)?.introduction = newIntro
findUserByID(id)?.character = newCharacter
findUserByID(id)?.profileImage = newProfileImage
}
}
Post 클래스
data class Post(val postID:Int,
val title:String,
val body:String,
val writerId:String,
val writtenTime:String,
var heartCount:Int = 0,
val image: Uri? = null,
val location:String = "위치 정보 없음"
) {
fun plusHeartCount() {
heartCount++
}
fun minusHeartCount() {
heartCount--
}
}
PostManager 클래스
- 게시글 정보를 관리하기 위한 클래스
- 싱글톤 패턴으로 구현
class PostManager private constructor(){
private val postList = mutableListOf<Post>()
private var nextPostID = 0
companion object{
private var instance: PostManager? = null
fun newInstance(): PostManager {
if(instance == null) instance = PostManager()
return instance!!
}
}
init{
addNewPost("겨울 등산 준비물 도와주세요",
"안녕하세요, 이번에 겨울 등산에 다녀올 예정입니다.\n겨울 등산에 필요한 준비물이 무엇이 있을까요?\n감사합니다!",
"hong_gildong",
location = "설악산")
addNewPost("히말라야 트래킹에 다녀왔어요",
"5박6일 히말라야 트래킹에 다녀왔어요.\n풍경도 좋고 걸으며 마음이 많이 편해졌답니다.\n걷는 걸 좋아하시는 분들은 꼭 한 번 다녀오시길 바랍니다!",
"kim_chulsoo",
location = "히말라야",
image = Uri.parse("android.resource://com.android.hikers/"+R.drawable.post_img_example1))
addNewPost("여기가 어느 산인지 아시는 분 계신가요?",
"인터넷에서 본 사진인데요 여기가 어느 산인지 모르겠어요.ㅜㅜ\n여기가 어딘지 아시는 분 있다면 꼭 댓글 달아주세요!\n",
"lee_younghee",
image = Uri.parse("android.resource://com.android.hikers/"+R.drawable.post_img_example2))
}
private fun getCurrentDateTime():String{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
var currentDateTime = LocalDateTime.now()
return currentDateTime.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"))
}
return ""
}
fun addNewPost(title:String, body:String, writerId:String, image:Uri? = null, location:String = "위치 정보 없음"):Int{
val postID = nextPostID++
var writtenTime = getCurrentDateTime()
postList.add(Post(postID, title, body, writerId, writtenTime, image = image, location = location))
return postID
}
fun getRecentPostList(n:Int):List<Post>{
val recentPostList = mutableListOf<Post>()
for(i in 0 until min(n, postList.size)){
recentPostList.add(postList[postList.size -1 -i])
}
return recentPostList.toList()
}
fun getMostRecentPostID():Int?{
if(postList.isEmpty()) return null
return postList[postList.size -1].postID
}
fun getLeastRecentPostID(n:Int):Int?{
if((n == 0) || postList.isEmpty()) return null
return if(postList.size < n) postList[0].postID
else postList[postList.size - n].postID
}
fun findPostByID(postID: Int): Post? {
return postList.find { it.postID == postID }
}
}