본문 바로가기

개발관련/TIL

내배캠 10주 4일차

또 오랜만에 돌아온다..

매번 프로젝트하다가 TIL 쓰는 게 귀찮아서 안 쓰게 되는 거 같다.

 

이번에 쓸 내용은 자바 클래스의 접근제어지시자의 관해서이다.

오잉? 뜬금없이 코틀린 하는데 자바라니 무슨 소린가 할 수 있다. 일단 왜 그런지 배경을 알아보자

 

Comment.kt의 일부

@Entity
@Table(name = "comment")
class Comment{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long? = null

    @Column(name = "content", nullable = false)
    var content: String? = null

    @Column(name = "created_at", nullable = false)
    val createdAt: LocalDateTime = LocalDateTime.now()

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "issue_id", nullable = false)
    var issue: Issue? = null

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id", nullable = false)
    var member: Member? = null

    companion object{
        fun createComment(content: String, issue: Issue, member: Member): Comment{
            val comment =  Comment()
            comment.content = content
            comment.issue = issue
            comment.member = member
            return comment
        }
     }
    }

 

위 코드는 댓글 엔티티인데 생성자를 통해서 프로퍼티(멤버변수)를 초기화하는 것이 아닌 컴패니언 오브젝트(자바로 치면 스태틱) 함수를 이용해서 프로퍼티를 초기화하는 것이다. 왜 저렇게 하냐고 물어보니깐 다른 곳(다른 파일 또는 클래스)에서 프로퍼티에 접근하지 못하게 한다고 했다. 근데 뭔가 이상하다. 저렇게 한다고 다른 데서 프로퍼티에 접근을 못한다고? 그래서 다른 위치에서 접근해 봤다.

CommentService.kt의 일부

val comment = Comment.createComment("댓글 내용",issue,member)

comment.content = "1"
comment.issue
comment.member 

 

댓글 객체를 만들어서 각 프로퍼티에 접근을 해보니 접근이 가능했다. 그래서 이 문제점을 가지고 팀원에게 얘기를 하니 자바에서는 프로퍼티 앞에 아무것도(접근제어 지시자) 안 붙이면 다른 곳에서 접근이 안되고 게터나 세터를 이용해야지만 가능하다고 했다. 그래서 왜 그러냐고 게터랑 세터에 대해 물어봤고 그 팀원 분은 게터랑 세터에 대해 설명해줬지만 내가 아는 내용이랑 같았다. 때문에 계속 의문이 들었다. 아무것도 안 붙이는데 왜 접근이 안되지? 에 대해 계속 물어봤으나 나랑 팀원 분의 얘기는 뭔가 안 맞아서 얘기가 진행이 안 됐다. 따라서 자바에 대해서 확인해 봤다.

 

자바의 접근제어 지시자 : https://hifumialice.tistory.com/46

 

위 글에서 본 것처럼 자바에는 default 접근제어 지시자가 따로 있어서 그랬던 것이다. 그것 때문에 한참 고민을 했다. 이번에 자바의 접근제어 지시자에 대해 찾아보면서 느낀 것이 확실히 코틀린을 하다 보면 자바에 대해서 기본적으로 어느 정도는 알아야겠다고 생각이 들었고 뭐든지 기초가 중요하다고 다시 한번 느끼게 됐다.

'개발관련 > TIL' 카테고리의 다른 글

내배캠 11주 1일 차  (0) 2024.06.24
내배캠 10주 5일 차  (0) 2024.06.21
내배캠 9주 2일 차  (0) 2024.06.11
내배캠 9주 1일 차  (0) 2024.06.10
내배캠 7주 2일 차  (0) 2024.05.28