본문 바로가기
TIL

2024.04.16 39일차 JAVA 객체지향 프로그래밍

by Song.dev 2024. 4. 16.

객체지향 프로그래밍

패키지에서 클래스 별로 역할과 책임을 부여하고 그에 맞게 프로그래밍하는 방법

 

* MVC 패턴

  - 모델 : 데이터 정의, 저장 및 관리

  - 뷰 : 앱의 데이터를 보여주는 방식을 정의

  - 컨트롤러 :  앱의 사용자로부터의 입력에 대한 응답으로 모델 및/또는 뷰를 업데이트하는 로직을 포함

 

toString()

  • 객체를 print하면 해시값이 나오는 이유?

컴파일러가 객체 출력 시 toString() 메서드를 기본으로 사용하기 때문

Object.js에서 toString() 메서드가 어떻게 구성되어 있는지 보면 해시값을 반환하는 것을 알 수 있음

Member.js에서 toString() 오버라이딩 하여 객체 내부의 정보를 출력할 수 있음 (접근제어자 주의)

// Objec.js
public String toString() {    return getClass().getName() + "@" + Integer.toHexString(hashCode());}

// Member.js
    public String toString() {
        return  String.format("# 이름: %s, 이메일: %s, 나이: %d세, 성별: %s, 가입일: %s",
               this.memberName, this.email, this.age, this.gender, this.regDate);
    }

 

** Reference Type 일 때 toString을 오버라이딩 하지 않은 경우 요소가 출력되지 않고 요소의 해시값이 출력됨
 ex) Array.toString 시 배열 전체가 문자열화 되어 출력될 뿐 각 요소는 해시값으로 출력됨  ( 출처 )

 

 

 

매개변수로 배열 사용 시 주의사항

메서드 내부에서 참조형 타입을 매개변수로 가져온 뒤 새로운 주소를 부여해도 메서드가 종료되면 변경사항은 적용되지 못하고 기존 주소를 그대로 갖게 됨

 


새로운 배열 객체가 생성되고, 이는 메서드 내에서 새로운 배열 객체를 참조하게 됩니다. 그러나 이 변경된 배열 객체의 참조는 메서드 외부에서는 보이지 않습니다.

따라서 arr 배열의 크기를 변경하는 것은 메서드 내부에서만 적용되며, 메서드 외부에서는 원래 배열에는 영향을 미치지 않습니다.

이를 해결하는 방법 중 하나는 메서드가 변경한 배열을 반환하여 이를 캡처하는 것입니다. 혹은 배열 대신 컬렉션을 사용하여 동적으로 크기가 조정되는 자료구조를 활용할 수 있습니다.