딱콩이의 봄

JAVA공부 본문

개발/JAVA

JAVA공부

코린이딱콩 2022. 8. 15. 19:42

OverRiding과 Overloading의 차이

오버 라이딩은 상위 클래스에 있는 메서드를 하위 클래스에서 재정의 하는 것입니다.

오버 로딩은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메서드를 여러 개 정의하는 것입니다.


접근 제한자(Access Modifier)

변수 또는 메서드의 접근 범위를 설정해 주기 위해 사용하는 JAVA 예약어입니다.

  • Public: 접근 제한이 없습니다.(같은 프로젝트 내 어디서든 사용이 가능합니다.)
  • Protected: 해당 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 사용 가능합니다.
  • default: 해당 패키지 내에서만 사용 가능합니다.
  • Private: 해당 클래스에서만 접근이 가능합니다

Wrapper Class 

기본 자료형을 객체로 다루기 위해 사용하는 클래스 표현입니다.

자바는 모든 기본 타입 값을 갖는 객체를 생성할 수 있습니다.

 

Boxing &UnBoxing

기본 자료형에서 Wrapper Class로 변환하는 것을 Boxing

Wrapper Class에서 기본 자료형으로 변환하는 것을 UnBoxing


Call by Value & Call by Reference

call by value(값에 의한 호출) 은 인자로 받은 값을 복사하여 처리

call by reference(참조에 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 줌


String & String Buffer & String Builder 차이점

String은 불변의 속성을 가지며 StringBuffer&StringBuilder는 가변의 속성을 가집니다.

String은 문자열 연산이 적고 멀티 스레드 환경일 경우 사용하고, StringBuffer는 문자열 연산이 많고 멀티 쓰레드 환경일 경우 사용하며,

StringBuilder는 문자열 연산이 많고 단일 쓰레드 이거나 동기화를 고려하지 않아도 되는 경우에 사용합니다.

StringBuffer/StringBuilder는 가변성을 가지기 때문에 append, delete 등의 api를 이용해 동일 객체 내에서 문자열을 변경 가능합니다.


String이 불변인 이유

 

1.String pool

어떤 프로그래밍이라도 String 타입은 빈번하게 사용됩니다. 그래서 Java는 String pool이라는 공간에 String을 포함시켜 매번 String 객체를 새로 생성하기보단 값이 같은 String이라면 Stringpool에 있는 객체를 재사용할 수 있도록 구현했습니다.

즉 값이 같은 String은 String pool 내에서  Stirng 객체를 공유하도록 한 것인데,

공유를 하려면 String은 반드시 불변이어야 합니다. 가변이라면 객체는 공유가 불가능합니다.

 

2. 보안

JAVA에서 메서드의 파라미터로 String을 받는 경우는 매우 흔합니다.

예를 들어 사용자의 이름이나, 패스워드, 혹은 네트워크 연결을 위한 포트번호나 connection URL, 파일 이름 등 중요한 정보를 String으로 받을 때가 많습니다.

그런데 String이 가변적이라면, 메서드의 인자로 받은 값은 메서드의 호출자에 의해 언제든지 바뀔 수 있게 됩니다. 이렇게 되면 보안상 엄청난 취약점을 발생시키기 때문에 immutable 한 객체인 겁니다.

 

3. 동기화

객체가 불변이면 멀티스레드 환경에서도 값이 바뀔 위험이 없기 때문에, 자연스럽게 thread-safe 한 특성을 갖게 되고, 동기화와 관련된 위험요소에서 벗어날 수 있습니다.

또한 String의 경우 한 스레드에서 값을 바꾸면, 해당 객체의 값을 수정하는 것이 아니라 새로운 객체를 String pool에 생성합니다.

 

 

 

'개발 > JAVA' 카테고리의 다른 글

JAVA공부  (0) 2022.08.16
JAVA 공부  (0) 2022.08.16
JAVA공부  (0) 2022.08.16
JAVA 공부  (0) 2022.08.15
JAVA 공부  (0) 2022.08.15
Comments