[JAVA] 공부하다 정리하는 기본 개념 2
String 클래스
public static void main(String[] args) {
String ins1 = "Hello world";
String ins2 = "Hello world";
String ins3 = new String("hello world");
String ins4 = new String("hello world");
}
}
new 연산자를 이용하지 않고 인스턴스를 만드는 경우
ins1에서 "hellow world" 라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다.
그렇기 때문에 ins2도 hello world 라는 문자열 상수가 이미 만들어져 있기 때문에 ins1이 참조하는 것을 똑같이 참조하는 것이다.
new 연산자를 이용해서 인스턴스를 만드는 경우
new 연산자를 이용하면 인스턴스가 무조건 새롭게 만들어진다.
ins3, ins4 모두 서로 다른 인스턴스를 참조하게 된다.
그래서 ins1, ins2가 같은지를 물어보면 같은 인스턴스를 참조한다.
하지만 ins3, ins4는 서로 다른 인스턴스를 참조한다.
여기서 String 클래스의 고유한 특징은 new를 사용하지 않고 사용할 수 있다는 특징이다.
그리고 불변 클래스이다. String이 인스턴스가 될 때 가지고 있던 값을 나중에 수정할 수 없다.이는 메소드를 호출할 경우에도 마찬가지이다.
String이 가지고 있는 메소드 중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
ins1의 일부를 잘라서 반환하는 것도 모두 새로운 String을 참조하는 것
메소드
이전 글에도 메소드가 무슨 역할을 하는지는 보았지만 다시 한 번 정의를 해보겠다
클래슨느 필드와 메소드로 구성되어 있습니다.
메소드는 입력값을 받아서 무언가를 한 다음에 결과값을 도출하는 함수와 같은 역할을 합니다.
메소드는 입력값 : 매개변수, 인자, 결과값 : 리턴값 으로 이루어져 있습니다.
여기서 입력값은
인자(Argument) : 어떤 함수를 호출시에 전달되는 값을 의미한다.
매개변수(parameter) : 전달된 인자를 받아들이는 변수를 의미한다.
메소드 선언
1. 아무것도 반환해야 할 값이 없는 경우(입력받는 값도 없거나 있어도 상관 없음)
public void를 사용한다.
2. 반환해야 하는 값이 있는 경우
반환할 값의 유형을 명시해야 한다.
public int
static
- main 메소드는 static이라는 키워드로 메소드를 정의한다.
- 이는 같은 클래스 내에 있더라도 해당 변수들을 사용할 수 없다.
- static 한 필드 (필드 앞에 static 키워드를 붙인다)나, static한 메소드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.
- 객체를 생성하지 않아도 static 메소드를 사용할 수 있음, static하지 않은 메소드는 사용할 수 없음 (해당 클래스가 인스턴스화 되지 않았을 수도 있기 때문에)
- static한 필드는 인스턴스가 생성된 순간에 만들어진 것이 아니기 때문에 값을 저장할 수 있는 공간이 하나밖에 없다.(즉 static한 변수는 클래스 변수, 값을 공유한다. 클래스 이름을 직접 사용한 후에 변수 명을 사용한다.)
- static하지 않은 필드의 값은 인스턴스 변수라고 한다.
생성자
모든 클래스는 인스턴스화 될때 생성자를 사용한다.