국비교육(22-23)

13일차(2)/java(3) : DataType, 객체지향 언어

서리/Seori 2022. 10. 24. 18:17

13일차(2)/java(3) : DataType, 객체지향 언어

 

<MainClass07> : 변수에 값 대입하기

package test.main;

public class MainClass07 {
	
	//run했을 때 실행의 흐름이 시작되는 아주 특별한 메소드!
	public static void main(String[] args) {
		//지역변수를 미리 만들고 나중에 필요한 값을 넣고 싶으면 초기값을 대입하는 것이 좋다.
		int num1=0;
		String name1=null;
		
		//필요시에 값 넣기
		num1=10;
		name1="바나나";
	}
}

- Main 메소드란? 하나의 어플리케이션을 만들었다고 할 때, 그 앱을 실행(run)했을 때 시작되는 부분!
- 우리가 우클릭-run as-java application 을 누르면 메인 메소드를 제일 먼저 찾는다!

- 보통은 String name1="xxx" 이라고 값을 그냥 집어넣지만
 공간(변수)만 먼저 만들어두고 값을 나중에 넣어야 할 경우,

 무엇이든 초기값을 먼저 대입해 주어야 한다.(아니면 변수 생성 자체가 되지 않는다)

- class 안에는 메소드를 만들 수 있다. 메소드의 시작과 끝 { }
- 메소드 안쪽은 들여쓰기 하기. 코드 줄 잘 맞추는 습관 들이기!

 


 

<MainClass08> : 객체의 메소드를 사용해서 변수에 해당 값을 대입하기

package test.main;

public class MainClass08 {
	public static void main(String[] args) {
		String str="abcde12345";
		int result=str.length();
		char result2=str.charAt(5);
		/*
		 * String 객체의 메소드를 활용해서
		 * str 변수 안에 있는 문자를 모두 대문자(UpperCase)로 변환해서
		 * str2라는 이름의 변수를 만들어보세요.
		 */
		String str2=str.toUpperCase();
		
		String greet="Hello! mimi, Bye! mimi";
		//위의 문자열에서 mimi라는 문자열을 mama라는 문자열로 교체해서 결과를 greet2에 담아보세요.
		//단, String 객체의 메소드를 이용해서
		String greet2=greet.replace("mimi", "mama");
		
		String message="My name is Banana";
		/* 
		 * 1. 위의 문자열이 My라는 문자열로 시작하는지 여부(true or false)를 isStart 라는 변수에 담아 보세요.
		 * 2. 위의 문자열에서 i가 문자열의 몇번째 인덱스에 위치하고 있는지를 index라는 변수에 담아 보세요.
		 */
		boolean isStart=message.startsWith("My");
		int index=message.indexOf("i");	
	}
}

 


 

- 참조형 데이터타입은 무한대의 가지수가 있다.
 사물함 영역이 생기지 않는 것은 8가지 데이터타입밖에 없다.(숫자6,문자1,논리1)
→ 나머지 모든 데이터는 모두 사물함 영역(heap)이 만들어진다.

 

heap 영역(사물함 영역) 에 만들어지는 무언가를 '객체'라고 한다.
객체는 필드메소드로 이루어져 있다. 필드는 값의 '저장소', 메소드는 '기능'이다.
즉, java로 프로그래밍한다는 것은 여러가지 type 객체의 필드와 메소드를 활용해서
어떤 목적을 달성하는 것이다. (ex.앱 개발 등)

그래서 java를 객체 지향 언어라고 한다.

 


 

- str. 을 사용해서 사물함을 소환하는 것!
 안에 있는 기능(메소드)을 사용하거나, 저장소(필드)의 내용을 참조한다.

 

- 객체가 만들어지는 메모리의 heap영역은
 참조값이 22(라고 가정)이고, string type 데이터를 저장한다.
 abcde12345은 참조값으로 바뀌고, str에 대입되는것은 실제 값이다.

- str 안에 있는 메소드(대입할 내용) : 리턴값의 타입 을 보여준다.

(string type 객체가 가지고 있는 기능 목록을 보여준다)

 

- 자바에서 메소드로 호출한 위치의 값은 바뀔 수도 있고 바뀌지 않을 수도 있다.
 동작을 하고 끝나는 메소드의 경우, 리턴값을 돌려주지 않는다.
참고) javascript는 항상 리턴값이 있다(호출위치의 값이 바뀌었다). undefined로라도!

 

 

- 메소드는 length, int는 리턴 타입!
 → str.length(); 하면 int타입이 리턴된다.
- 이 값을 변수에 담고 싶으면 대입연산자를 이용해 담기.

 → .length(); 는 int가 리턴되므로 int a=str.length(); 로 담아야 한다.

 

- 4라는 값을 대입해서 char 타입의 리턴값을 만들어낸다!

 (문자: char / 문자열: string 을 구분!)

- charAt(); = n번째 문자 반환! (0부터 시작한다) → char 타입 반환 
- charAt이라는 메소드는 char 값을 리턴하므로, 변수도 char로 받아주어야 한다.

 ex) char result2=str.charAt(5);

 

- 메소드를 잘 호출하기 위해서는 리턴타입이 무엇인지 확인해야 한다.
  어떤 값을 전달해야 되는지, 리턴값이 무엇인지를 생각하며 코드를 작성하기.
 → 자동완성되는 메소드를 보면 예상할 수 있게 되어 있다!

 


 

String greet2=greet.replace("mimi", "mama");

- replace("기존 문자열", "새 문자열"); 기존 문자열을 새 문자열로 변환하기 → string 타입 반환

- string 타입이 반환되므로 string 타입 변수에 담는다.
 참고) string타입은 charSequence타입이기도 하다.

boolean isStart=message.startsWith("My");
int index=message.indexOf("i");

- .startWith("문자") : () 안의 문자로 시작하는지 여부 → boolean 타입 반환 
- .indexOf("문자") : () 안의 문자가 몇번째에 위치하는지 → char 타입 반환
- .lastIndexOf("문자") : () 안의 문자가 뒤에서부터 세어서 몇번째에 위치하는지 → char 타입 반환