Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

김영록 3주차 미션 #9

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

kimyeoungrok
Copy link
Member

피그마의 첫번째 부분(홈)에서 (+글쓰기) 부분을 고정하면서 스크롤하는 부분을 구현하는게 어려울 것 같아서 구현해보았고,
프래그먼트에서 액티비티로 데이터를 전송하는 과정도 알아두면 좋을 것 같아서 구현해두었습니다.
나의 당근 부분은 xml작성하는 거여서 제가 안해도 스터디원들이 잘 할 것 같습니다.

Copy link
Contributor

@hyuns66 hyuns66 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고칠만한 점은 딱히없고 몇가지 고려해보면 좋을 점 들을 달아보았습니닷

Comment on lines +32 to +35
binding.ivHomeAlarm.setOnClickListener {
val intent = Intent(requireContext(), AlarmActivity::class.java) // ::은 리플렉션이라고 함 왜 .java붙음?
startActivity(intent)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(저도 잘 몰랐던 부분인데 이번기회에 조사해보고 정리한내용 공유드립니닷 ^^7)
리플렉션이란 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 입니다.
아래 코드를 보실까요

public Intent(Context packageContext, Class<?> cls) {
        throw new RuntimeException("Stub!");
    }

Intent가 실제로 Context와 제네릭 타입의 Class를 인자로 받도록 구현되어 있습니다. 즉 정확히 어떤 클래스를 받을지 명시되지 않았기 때문에 컴파일 시점에서 이를 명시해주어야 하고 리플렉션을 통해 어떤 클래스를 참조하게 할 것인지 명시하고 있는 것입니다.
클래스를 직접 생성해서 인자로 넘겨주는거랑 리플렉션으로 클래스자체를 참조하도록 하는것이랑 무슨차이인지 헷갈릴 수 도 있는데 조금 설명을 덧붙여보겠습니다.
Intent 클래스는 안드로이드 자체적으로 구현되어 있는 Built-in class이고 Intent 클래스 안에서 제네릭 타입의 알 수 없는 어떤 클래스에 대한 모든 Intent 관련 동작이 구현되어 있습니다. 그러나 어떤 클래스가 들어올지는 런타임중에 액션이 일어나는 그 시점에 정해지기 때문에 리플렉션을 통해 참조할 클래스를 알려주는 식으로 구현하고 있는것입니다.
(리플렉션을 사용하면 런타임에 클래스정보를 조사하고 클래스 내의 필드, 메서드 등을 사용할 수 있도록 해줍니다.)
반면에 클래스를 직접 생성하고 해당 인스턴스를 사용하는 것은 정적(컴파일 타임)인 경우에 사용됩니다. 따라서 Built-in Intent 클래스를 사용하지않고 직접 동일한 기능을 구현하여 사용할 수 있다면 직접 객체를 생성하는 방식을 사용해도 무방합니다.

::class로 참조하는 방식은 코틀린의 리플렉션 메서드입니다. 따라서 AClass::class로 참조하게 되면 코틀린의 클래스타입인 KClass 객체가 반환됩니다. 그러나 Intent 코드를 보면 Class를 받도록 되어있기 때문에 자바의 클래스타입인 Class를 반환하도록 AClass::class.java를 사용합니다.

): View? {
binding = FragmentHomeBinding.inflate(layoutInflater)

parentFragmentManager.beginTransaction().replace(R.id.fl_stuff_info, HomeScrollFragment()).commit()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScrollView를 프래그먼트로 띄우셨네요!
물론 구현방법에 정답은 존재하지 않지만 몇가지 고려사항을 제시해보겠습니다!

  1. 보통 Fragment를 사용하는 이유는 화면분할 혹은 모듈화 및 재사용성 증가를 위함입니다. 과연 HomeFragment에서 이러한 이점을 얻을 수 있을까요?
  2. Fragment를 사용하려면 FragmentManager를 통해 트랜잭션을 수행해야하는데 이러한 행위가 과도하게 많아질경우 성능오버헤드가 발생할 수 있습니다.
  3. 현재 구조는 액티비티위에 프래그먼트 위에 프래그먼트이며 각각의 단위는 모두 고유한 라이프사이클을 가집니다. 또한 프래그먼트 트랜잭션은 비동기수행되기 때문에 예기치않은 동작을 할 수 도 있습니다. -> 이러한 문제점을 내가 잘 컨트롤할 수 있을지?

물론 프래그먼트는 액티비티보다 가벼운 퍼포먼스를 가지기 때문에 적극 활용하는것은 매우 좋은 선택입니다!
그러나 충분히 하나의 UI내에서 그려낼 수 있는 상황에서 프래그먼트를 추가함으로써 오버헤드를 발생시키게 되는것은 아닌지 고려해보고 설계한다면 더 좋은 사용자경험을 이끌어낼 수 있을것 같습니다!

Comment on lines 93 to 99
<TextView
android:id="@+id/tv_item_home_comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:textColor="@color/black"
android:textSize="12dp"/>
Copy link
Contributor

@hyuns66 hyuns66 Oct 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

textSize를 줄 때 dp와sp의 차이를 알고 설계하신것이라 판단됩니다..!
sp로 주면 설정에서 텍스트사이즈를 바꿨을 때 전체적으로 텍스트가 커지거나 작아져서 UI가 바뀔 수 있지만 dp를 사용하면 설정에서 텍스트사이즈 변경에 영향을 받지 않습니다.
제가 예전에 진행했던 프로젝트에서는 디자인적 요소가 큰 프로젝트였기에 UI가 깨지는것을 원치않아 텍스트를 dp로 사용했지만 당근마켓의 경우 실제로 sp를 사용하여 폰트설정에 영향을 받습니다.
당근마켓은 중고거래 플랫폼이기에 비교적 사용자들의 나이대가 다양할 것입니다. 따라서 폰트 사이즈가 너무 작게 고정되어버리면 노인분들께 좋지않은 사용자경험을 미칠 수 있기에 개인이 조절가능하도록 sp로 설계하는것이 좋습니다. (물론 폰트사이즈 설정으로 인해 UI가 지나치게 깨지지않도록 디자인 설계하는것이 중요하겠죠?)
반면에 디자인적 요소가 큰 어플리케이션이면 dp를 활용하는것이 더 좋을 수 도 있습니다.
이런 점을 고려하면서 sp를 선택할지, dp를 선택할지 판단해보면 더 좋은 개발자가 될 것 같습니다!

Comment on lines 112 to 116
<ImageView
android:id="@+id/iv_item_home_like"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/ic_heart_outline_s"/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아이콘 사이즈(15dp) 텍스트사이즈 (12dp) 와 같이 일관된 사이즈로 디자인 하신것은 잘하셨습니다
보통 디자이너님과 협업하게되면 아이콘이나 타이포그래피에 대한 규격을 정해두기 때문에 dimens.xml 파일을 활용하여 일관된 규격을 유지하는 것이 좋습니다!
strign.xml, colors.xml 과 사용방법 동일합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants