이번에는 String 클래스가 제공하는 메소드를 사용하는 방법에 대해서 알아보려고 한다.
우선 기본적으로 문자열 길이를 구하는 방법이다.
str.length()는 str이 참조하는 문자열의 길이를 구해서 int타입으로 리턴해주는 메소드이다.
System.out.println(str.length());
//이 코드가 str이 참조하는 문자열의 길이를 구해주며 int 타입으로 리턴해주는 메소드이다.
다음은 문자열을 붙히는 방법이다,
str.concat("world") 메소드는 str이 참조하는 문자열 hello 에다가 메소드의 인자로 들어온 문자열
world를 붙혀서 String 타입으로 리턴하는 메소드이다.
String Class는 불변 클래스이며 메소드가 수행이되면 새로운 문자열을 만든다.
그렇기 때문에 원래의 클래스는 변하지 않는다.
String str = new String("hello");
System.out.println(str.concat("world")); // 이렇게 출력하면 hello 뒤에 world가 붙어서 hello world가 나온다.
System.out.println(str); // 이렇게 했을 때에는 다시 hello만 출력이 된다. (불변클래스이기 때문에 변하지 않는다.)
이번에는 문자열을 자르는 방법이다,
strsubString(1,3) 은 str이 참조하는 문자열을 인덱스 1번부터 3번까지 자른 결과이며
strsubString(2) 는 str이 참조하는 문자열을 2번 인덱스부터 마지막까지 자른 결과를 의미한다.
여기서 알아야하는 것은 문자열의 인덱스는 0번부터 시작을 한다는 점이다.
System.out.println(str.subString(1,3)); // 이렇게 했을 때에는 문자열을 인덱스1번~3번까지 자른 결과인 el가 나온다.
System.out.println(str.subString(2)); // 2번 인덱스부터 마지막까지 자른 결과이기 때문에 llo world가 나온다
변수의 scope 와 static
프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가지게 되는데 그 범위를 변수의 scope 라고 한다.
// 변수가 선언된 블럭이 그 변수의 사용 범위이다.
public class ValableScopeExam{
int globalScope = 10; // 인스턴스 변수
public void scopeTese(int value){
int localScope = 10;
System.out.println(globalscope);
System.out.println(localScope);
System.out.println(value);
}
}
클래스의 속성으로 선언된 변수인 globalScope의 사용 범위는 클래스 전체이며
매개변수로 선언된 int value는 블럭 바깥에 존재하기는 하지만 메서드 선언부에 존재하기 때문에
사용 범위 자체는 해당 메소드 블럭 내 이며
메소드 블럭 내에서 선언된 localScope의 범위는 메소드 블럭 내이다.
그리고 main메소드에서 사용을 하는 방법도 있는데
같은 클래스 안에 있는데 globalScope 변수를 사용할 수 없으며 main은 static한 메소드이다.
static한 메소드에서는 static 하지 않은 필드를 사용할 수는 없다.
public class VariableScopeExam {
int globalScope = 10;
public void scopeTest(int value){
int localScope = 20;
System.out.println(globalScope);
System.out.println(localScope);
System.out.println(value);
}
public static void main(String[] args) {
System.out.println(globalScope); //오류
System.out.println(localScope); //오류
System.out.println(value); //오류
}
}
위와 같이 static 하지 않은 필드의 경우에는 어떠한 것도 사용을 할 수 없고 오류를 발생하게 된다.
그렇다면 static에 대해서 알아봐야할 듯 한데 static의 경우에는 같은 클래스 내에 있어도 해당 변수를
사용하지 못하며 main 메소드는 static 이라는 키워드로 메소드가 정의가 되어 있다.
이런 메소드를 static한 메소드라고 하며 static 한 필드 (필드 앞에 static키워드를 붙힘)나,
static한 메소드는 Class 가 인스턴스화 되지 않아도 사용을 할 수 있다.
public class VariableScopeExam {
int globalScope = 10;
static int staticVal = 7;
public void scopeTest(int value){
int localScope = 20;
}
public static void main(String[] args) {
System.out.println(staticVal); //사용가능
}
}
static 한 변수는 공유가 가능한데 static 하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성이 되며
인스턴스가 여러개 생성이 되더라도 static한 변수는 하나이게 된다.
ValableScopeExam v1 = new ValableScopeExam();
ValableScopeExam v2 = new ValableScopeExam();
v1.globalScope = 20;
v2.globalScope = 30;
System.out.println(v1.globalScope); //20 이 출력된다.
System.out.println(v2.globalScope); //30이 출력된다.
v1.staticVal = 10;
v2.staticVal = 20;
System.out.println(v1.statVal); //20 이 출력된다.
System.out.println(v2.statVal); //20 이 출력된다.
globalScope 같은 변수(필드)는 인스턴스가 생성이 될 때 생성이 되기 때문에
인스턴스 변수라고 하는데 staticVal같은 static한 필드를 클래스 변수라고 한다.
클래스 변수는 레퍼런스.변수명 하고 사용하기 보단 클래스명.변수명으로 사용하는 것이 바람직하다고 한다.
'Java' 카테고리의 다른 글
| Java(자바) 생성자 오버로딩 및 this와 패키지 (0) | 2022.08.17 |
|---|---|
| Java(자바) 클래스 다듬는 생성자와 this , 메소드 오버로딩 (0) | 2022.08.17 |
| 자바 수업 내용 간단 정리 (클래스 기능 및 사용법) (0) | 2022.08.16 |
| Java(자바) - 클래스에 대해서 알아보기(2) (0) | 2022.08.16 |
| Java(자바) - 클래스에 대해서 알아보기(1) (1) | 2022.08.12 |
댓글