[F-lab 챌린지 79일차 TIL]

성수데브리·2023년 9월 14일
0

f-lab_java

목록 보기
66/73

멘토링 복습

자바에서 변수의 종류

자바 변수는 지역 변수, 인스턴스 변수, 클래스 변수로 분류할 수 있습니다.

지역 변수는 메서드 내에서 선언하는 변수, 인스턴스 변수는 클래스 내부에서 메서드 외부에 선언하는 변수, 스태틱 변수는 static 키워드가 붙은 변수입니다.

이 변수들의 차이점은 참조 범위 입니다. 지역 변수, 파마리터는 메서드의 스택 프레임에 할당되므로 한 스레드에서 독립적으로 사용하는 변수입니다.

인스턴스 변수는 객체 내에 존재하는 모든 메서드에서 접근이 가능합니다. 접근제어자가 public 일 경우 외부 객체에서도 접근이 가능합니다.

클래스 변수는 정적 변수라고도 하며 JVM의 method area 라는 공유 메모리 영역에 할당됩니다.

변수의 참조 범위를 제한하는 이유는 변수가 필요한 곳에서 독립적으로 사용되게 만들어 의도치 않은 변경을 방지합니다.

사이드 이펙트를 방지하기 위해 변수의 참조 범위를 최대한 줄이는 것이 중요합니다.

상수

변수를 상수로 사용하는 것은 변수 이름 앞에 final 을 선언해서 만들 수 있습니다.

상수란 변하지 않는 값으로 변수가 최초 초기화된 이후에는 변경할 수 없게 됩니다.

변수를 상수로 선언했을 때 장점은 변수에 할당된 값이 참조값일 런타임시에 null 이 할당될 위험을 방지할 수 있습니다.

그리고 변경되지 않는 변수임을 보장함으로써 누군가 의도치 않게 값을 변경하는 상황을 방지할 수 있습니다.

참조형보다 프리미티브 타입을 선호해야 하는 경우

자바에서 기본 자료형을 뜻하는 primitive type 은 값을 할당해주지 않으면 각자 디폴트 초기 값으로 셋팅이 됩니다.

반명 참조형 변수는 값을 할당하지 않으면 참조형 변수가 아무런 객체도 참조하고 있지 않다는 null 상태가 됩니다.

이는 런타임시에 NPE 발생 위험을 높이게 됩니다. 참조형 변수는 항상 NPE 가 발생할 위험이 있기 때문에 null 체크가 Optional 사용 등 추가 처리가 필요합니다.

두 번째는 기본자료형이 성능상 더 유리합니다.

기본 자료형 변수에는 값이 바로 할당되어 기본 자료형끼리 연산을 할 때 메모리에 있는 값을 읽어오고 연산 결과를 다시 메모리에 바로 저장합니다.

하지만 래퍼 클래스로 연산을 하면 오토 박싱, 언박싱 과정을 거치고 또 내부적으로 연산 결과를 new 키워드로 객체를 새로 생성하기 때문에 오버헤드가 발생합니다.

래퍼 클래스에 있는 기본 자료형에 적용하는 기능들을 사용하는 상황이 아니라 단순하게 값을 할당해야 한다면 프리미티브 타입이 적합합니다.

== & equals()

== 은 동등 비교로서 변수에 할당된 값이 일치하는지를 비교합니다.

기본 자료형에 사용하면 값을 비교합니다. 참조 자료형에 사용하면 참조값을 비교합니다.

두 참조 자료형이 == 비교로 일치한다면 두 참조값은 힙 영역에서 동일한 객체를 참조합니다.

equals() 는 Object 클래스에 선언된 메서드로 객체의 동등성을 비교할 때 사용합니다.

동등성이란 두 객체의 상태값들이 동일한지 객체의 내용을 비교합니다.

그러므로 힙영역의 다른 영역에 할당된 객체일 지라도 객체의 상태값들이 일치하면 동등하다고 판단합니다.

Object 클래스에 구현된 equals() 는 == 연산을 하기 때문에 오버라이딩 해서 객체의 내용을 비교하도록 변경해줘야 합니다.

equals() 를 재정의할때는 반드시 hashCode() 도 함께 재정의해야합니다.

코드 품질 관리

코딩 컨벤션

코드 리뷰

상호간에 코드 리뷰를 수행함으로써 미래에 발생할 사이트 이펙트를 예측하거나 구조적으로 문제가 있는 부분을 찾아서 이를 개선

단위 테스트

코드 커버리지

정적 분석

중복 코드 제거

소스코드 내에 존재하는 중복 코드를 제거하여, 추후 발생할 수 있는 유지보수 상의 문제점을 방지합니다. 만약 중복 코드가 존재하고 코드에 대한 수정이 한쪽에서만 발생한다면 수정되지 않은 코드는 다른 오류를 야기하거나 예상하지 못한 결과를 리턴 할 수도 있기 때문에 이러한 중복 코드를 제거하여 하나의 코드에서 기능이 동작할 수 있도록 리팩토링 작업을 수행해야 코드의 일관성과 안정성을 유지할 수 있습니다.
출처

0개의 댓글