네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

'programming language'에 해당되는 글 67건


반응형

String

* String을 이용하는 방법에는 두 가지 방식이 있다.

1. new 연산자를 이용한 방식 ( String str = new String(""); )

 - new 연산자를 쓰면 Heap 영역에 할당된다. 그래서 같은 문자열이라도 다른 객체라서 선언한 만큼의 새로운 객체가 메모리에 올라간다.

 

2. 리터럴을 이용한 방식 ( String str = ""; )

  - String constant pool (상수 영역)이라는 영역에 할당된다.

  - String을 리터럴로 선언하면 내부적으로 String의 intern() 메소드가 호출된다. intern() 메소드는 주어진 문자열이 string constant pool에 존재하는지 검색한다. 있다면 그 주소값을 반환하고 없다면 string constant pool에 넣고 새로운 주소값을 반환한다. 그래서 메모리에는 하나만 올라가게 된다. 그래서 메모리에는 하나만 올라가게 된다.

 

Java6까지 string constant pool의 위치가 perm이었지만 java7 이후 Heap으로 변경되었다. perm은 고정사이즈고 runtime에 사이즈가 확장되지 않아서 변경됐다고 한다.

 

cf) 리터럴(literal) : 변수 및 상수에 저장되는 값 자체. 즉, 공간이 아니라 그 값. 정수 리터럴, 문자열 리터럴, 배열 리터럴 등등이 있다.

 

* String 객체의 hashCode() 메소드

Java에서 참조형 변수의 메모리 주소를 파악하는 방법 => Object 객체의 hashCode()

=> hashCode()의 값은 실제 메모리 주소가 아닌 메모리 주소 값을 해싱된 값이다.

 

하지만, String 객체는 hashCode() 메소드가 immutable 오버라이딩 되어있어, 주소가 아닌 문자열을 해싱한 값을 가지고 있다.

String str1 = new String("hello");.
System.out.println(str1.hashCode());            // 99162322

String str2 = new String("hello");
System.out.println(str2.hashCode());            // 99162322

 

위의 두 String 객체 s1, s2는 다른 객체이기 때문에 주소값은 다를 것입니다.

일반적인 객체였다면 hashcode() 결과값이 달라야 하지만, String 객체이므로 hashCode()의 결과 값이 같다는 것을 확인할 수 있습니다.

 

 참고 

- 이펙티브자바 아이템 6. 불필요한 객체 생성을 피하라
다음 코드는 하지 말아야 할 극단적인 예이니 유심히 한번 살펴보자.
String s =. new String("bikini");
이 문장은 실행될 때마다 String 인스턴스를 새로 만든다. 완전 쓸데없는 행위다. 생성자에 넘겨진 "bikini" 자체가 이 생성자로 만들어내려는 String과 기능적으로 오나전히 똑같다. 이 문장이 반복문이나 빈번히 호출되는 메서드 안에 있다면 쓸데없는 String 인스턴스가 수백만 개 만들어질 수도 있다.
String s = "bikini";
이 코드는 새로운 인스턴스를 매번 반드는 대신 하나의 String 인스턴스를 사용한다. 나아가 이 방식을 사용한다면 같은 가상 머신 안에서 이와 똑같은 문자열 리터럴을 사용하는 모든 코드가 같은 객체를 재사용함이 보장된다.

https://qssdev.tistory.com/38

https://victorydntmd.tistory.com/133

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

참여하고자하는 프로젝트를 (github에서) fork한다. 

내 로컬(내 컴퓨터라고 생각하자) 에서 작업 후 pull request를 통해 프로젝트에 적용한다.

하지만 작업 도중에 원본 저장소에 다른 사람이 저장한 것은 내 로컬 저장소에서는 적용되지 않은다.

 

내 로컬 저장소에서도 원본 저장소의 최신 버전을 유지하고 싶다면?

 

1. 원본 저장소를 fork한 후, 내 저장소(자신의 계정에 있는 저장소)에서 로컬 컴퓨터로 clone

 

git clone https://github.com/my_id/my_project_name

 

2. 원본 저장소를 remote에 추가

 

git remote add upstream https://github.com/your_id/your_project_name

 

3. 원본 저장소 내용을 내 저장소에 내려받음.

 

git fetch upstream

 

4. 내 작업 master에 병합

 

git checkout master

 

git merge upstream/master

 

5. 최신 버전을 받고싶다면

 

3-4 반복

 

6. pull request 만들기

github에서 new pull request를 눌러줌

 

 

참고: http://bbd531.tistory.com/entry/Git-fork-%ED%9B%84%EC%97%90%EB%8F%84-%EC%9B%90%EB%B3%B8%EC%9D%98-%EC%B5%9C%EC%8B%A0-%EB%B2%84%EC%A0%84-%EC%9C%A0%EC%A7%80%ED%95%98%EA%B8%B0

 

출처: https://nolboo.kim/blog/2013/08/29/how-to-collaborate-on-github/

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !