본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 8일차(메소드 오버로딩, String 클래스, String 클래스의 메소드, StringBuilder 클래스, 콘솔출력, 콘솔입력, 배열

가독성이 많이 떨어져도 이해바랍니다..

메소드 오버로딩(Method Overloading)

- 메소드를 호출 할 때 참조하는 정보

> 메소드의 이름

> 메소드의 매개변수 정보

- 메소드 오버로딩의 조건

> 매개변수 선언이 달라야 한다.(매개변수의 수 또는 형(type))

> 반환형이 다른 경우에는 메소드 오버로딩이 성립하지 않는다. (반환형은 호출할 메소드를 서택하는데 있어서

의 판단 기준이 아니기 때문이다.

- 생성자도 오버로딩의 대상이 된다.

> 매개변수의 선언이 다르면 둘 이상 정의가 가능하다.

- 키워드 this를 이용한 다른 생성자의 호출

Person(int rnum, int pnum) {

regiNum = rnum;

passNum = pnum;

}

Person(int rnum){

this(rnum, 0); // rnum과 0을 인자로 받는 다른 생성자를 호출

}

위에서 사용된 this는 ‘오버로딩 된 다른 생성자’를 의미한다. 즉 rnum과 0을 인자로 받는 다른 생성자의 호출을 의미한다. 위와 같이 생성자를 정의하면 이 생성자는 초기화할 값을 전달받는 역할만 하고, 실제 초기화는 첫 번째로 정의된 생성자를 통해서 진행하는 형태가 된다. 이와 같이 this를 이용한 생성자의 정의를 통해 중복된 코드의 수를 줄이는 효과를 얻을 수 있다.

- 키워드 this를 이용한 인스턴스 변수의 접근

class SimpleBox{

private int data;

SimpleBox(int data){

this.data = data; // 매개변수 data의 같을 인스턴스 변수 data에 저장

}

this를 사용하여 인스턴스 변수에 접근하는 것은 많이 쓰인다.

 

String 클래스

- String 클래스의 목적은 문자열 표현에 있다.

- String 클래스의 인스턴스 생성

> String str = new String(“Simple String”);

> String str = “Simple String”; (보편적인 사용방법)

- new를 통한 인스턴스 생성방법과 “ ” 를 통한 인스턴스 생성방법의 차이점

> String 인스턴스는 Immutable(변경할 수 없는) 인스턴스이다. 즉, 인스턴스가 갖는 문자 열 내용을 변경할

수 없는 것이다.

> String str1 = “Simple String”;

String str2 = “Simple String”;

String str3 = new String(“Simple String”);

Stirng str4 = new String(“Simple String”);

일 때 str1과 str2는 동일한 인스턴스를 참조하고 3과 4는 서로 다른 인스턴스를 참조한다.

 

String 인스턴스를 이용한 switch문의 구성

- 각 case 영역을 설명하는 문장을 구성할 수 있다. (별로 이렇게 설정하진 않는다)

 

String 클래스의 메소드

- 문자열 연결시키기 : Concatenating / .concat

> String1.concat(String2); // String1과 String2을 연결한 결과를 반환

> concat 메소드는 이어서 호출 가능하다.

- 문자열의 일부를 추출하기 : Substring / substring(인덱스 숫자)

> String str = “abcdefg”;

str.substring(2); // 인덱스 2 이후의 내용으로 이뤄진 문자열 “cdefg” 반환

자바는 맨 앞 문자의 인덱스 값이 0이다.

> String str = “abcdefg”;

str.substring(2, 4); // 인덱스 2~3에 위치한 내용의 문자열 반환

주의할 점은 2번째 인자로 전달된 인덱스 4에 위치한 문자는 반한되는 문자열에 포함이 안된다,

- 문자열의 내용 비교 : comparing / .equals / compareTo / compareToIgnoreCase

> String st1 = “ABC”

String st2 = “DEF”

st1.equals(st2) 식으로 쓰는 것(결과는 서로 다르다.)

> 위 클래스에 인스턴스가 생성되었다고 가정하고 int cmp 변수를 추가로 넣어준 후

cmp = st1.compareTo(st2)를 사전순으로 비교한다.

cmp = 0 이면 두 문자열이 일치하고

cmp < 0 이면 사전의 앞에 위치하는 문자는 st1 이고

cmp > 0 이면 사전의 앞에 위치하는 문자는 st2 이다.

> st1.compareToIgnoreCase(st2) == 0 이면 두 문자열은 같다. (대소문자 상관 X)

- 기본 자료형의 값을 문자열로 바꾸기

> static String valueOf(boolean b)

> static String valueOf(char c)

> static String valueOf(double d)

> static String valueOf(float f)

> static String valueOf(int i)

> static String valueOf(long l)

> double e = 2.718281; 일때

String se = String.valueOf(e); 로 사용하면 된다.

기본 자료형의 값을 문자열의 형태로 나타내야 하는 경우가 종종 있다.

- 문자열을 대상으로 하는 + 연산과 += 연산

- 문자열 결합의 최적화 : Optimization of String Concatenation

 

StringBuilder 클래스

- StringBuilder 클래스는 내부적으로 문자열을 저장하기 위한 메모리 공간을 지닌다.

- 이 메모리 공간은 String 클래스의 메모리 공간과 달리 문자를 추가 및 삭제가 가능하다.

- 수정하면서 유지해야 할 문자열이 있다면 이 클래스에 그 내용을 담아서 관리하는 것이 효율적이다.

- StringBuilder의 대표적인 메소드

append(int i) : 기본 자료형 데이터를 문자열 내용에 추가(오버로딩 되어있음)

> append 메소드가 반환하는 것은 append 메소드가 호출된 인스턴스의 참조 값이다.

StringBuilder stb1 = new StringBuilder(“123”);

StirngBuilder stb2 = stb1.append(45678); 일 때

우리는 stb1 = 123이라고 생각하겠지만, stb2에서 123 에 45678을 추가하였다. append 메소드는 새

로 운 인스턴스를 생성하는 것이 아니라 한 인스턴스의 메소드를 이 어서 호출하기 때문에 stb2와 stb1은

같은 참조값을 가리키게 된다.

delete(int start, int end) : 인덱스 start에서부터 end 이전까지의 내용을 삭제

insert(int offset, String str) : 인덱스 offset의 위치에 str에 전달된 문자열을 추가

replace(int start, int end, String str) : 인덱스 start에서부터 end 이전까지의 내용을 str의 문자열로 대체

reverse() : 저장된 문자열의 내용을 뒤집는다.

substring(int start, int end) : 인덱스 start에서부터 end 이전까지의 내용만 담은 String 인스턴스를 생성 및

반환

String toString() : 저장된 문자열의 내용을 담은 String 인스턴스의 생성 및 반환

 

콘솔 출력(Console Output)

- System.out.println은 참조 값이 전달되면, 이 값의 인스턴스를 대상으로 toString 메소 드를 호출한다. 그리고

이때 반환되는 문자열을 출력한다.

- 문자열을 조합해서 출력하는 System.out.printf 메소드

> %d 10진수 정수형태의 출력

> %o 8진수 정수형태의 출력

> %x 16진수 정수형태의 출력

> %f 실수의 출력

> %e e 표기법 기반의 실수 출력

> %g 출력의 대상에 따라서 %e 또는 %f 형태의 출력

> %s 문자열 출력

> %c 문자열 출력

System.out.printf(“정수는 %d, 실수는 %f, 문자는 %c”, 12, 24.5, ‘A’)

 

콘솔 입력(Console Input)

- Scanner 클래스

> 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능을 제공한다.

> Scanner sc = new Scanner(System.in);

> System.in은 키보드를 의미하는 인스턴스의 참조변수이다.

 

배열(Array)

- 1차원 배열

> 1차원 배열은 타입이 같은 둘 이상의 데이터를 저장할 수 있는 1차원 구조의 메모리 공 간이다.

> 자바에서는 배열도 인스턴스이다.

> int[] ref = new int[5]; // 길이가 5인 int형 1차원 배열의 생성문

> int[] ref // int형 1차원 배열 인스턴스를 참조할 수 있는 ‘참조변수의 선언’

> new int[5] // int형 값 5개를 저장할 수 있는 ‘배열 인스턴스의 생성’

> 인스턴스를 저장할 수 있는 배열의 생성도 가능하다.

> Box[] ar = new Box[5];

> Box 인스턴스 5개를 저장할 수 있는 참조변수의 배열이다. 즉, Box 인스턴스의 생성 과는 관계가 없다.

> 배열을 대상으로 한 값의 저장과 참조

> ar [0] = 7; // 배열 ar의 첫번째 요소에 정수 7 저장

> ar [0] = new Box(“First”); // 배열에 인스턴스 저장

> 배열을 생성과 동시에 초기화하기

> 예시 : int [] arr = new int[] {1, 2, 3};

> 참조변수 선언의 두 가지 방법

> 예시 : int[] ar = new int[3]; // 조금 더 선호하는 방법

> 예시 : int ar[] = new int[3];

> 배열의 참조 값과 메소드

> 배열도 인스턴스이므로 메소드 호출 시 참조 값의 전달이 가능하다.

> public static void main(String[] args){

int[] ar = {1, 2, 3, 4, 5, 6, 7};

int sum = sumOfAry(ar); // 배열의 참조 값 전달

}

static int sumOfAry(int[] ar) {

int sum = 0;

for(int i = 0; i < ar.length; i++){

sum += ar[i];

return sum;

}

> 배열의 초기화와 배열의 복사

> int[] ar = new int[10]; // 배열의 모든 요소 0으로 초기화

> String[] ar = new String[10]; // 배열의 모든 요소 null로 초기화

> public static void fill(int [] a, int val) : 두 번재 인자로 전달된 값으로 배열 초기화

> public static void fill(int [] a, int fromIndex, int toIndex, int val)

> 인덱스 fromIndex ~ (toIndex-1)의 범위까지 val의 값으로 배열 초기화

> public static void arraycopy(배열, 복사할원본위치, 복사대상배열, 복사대상위치, 복사수)

enhanced for문

for(요소 : 배열) {

반복할 문장들

}

예시

for(int e : ar){

System.out.println(e);

}

- 인스턴스 배열을 대상으로 하는 enhanced for문

> Box[] ar = new Box[10];

for(Box e : ar) {

내용내용내용

}