절차지향언어: C
기능에 focus(회전시킨다). 빠르다.
제공자쪽 소스코드가 바껴야 하면 사용자쪽 소스코드도 같이 바껴야함. (결합도가 높은 코드)
원을 회전시킨다
사격형을 회전시킨다
객체지향언어
객체에 focus (원,사각형)
속도가 느리다
원을 회전시킨다
사격형을 회전시킨다
메모리
stack : 지역변수, 메소드를 호출할때마다 생성되는 프레임이 저장됨. 메소드 호출이 끝나면 프레임은 자동 제거 됨.
heap : 객체가 생성되는 영역 , 멤버 변수 (객체 생성시 자동 초기화 됨)
객체의 특징이 되어야할 변수는 멤버변수로 선언되어야 한다.
(지역변수는 특정 블록 내에서만 사용될 수밖에 없기 때문)
== (같다), !=(다르다) 연산
변수의 값이 같은지, 아닌지를 조사. 참조 타입 변수의 ==, != 연산자는 번지를 비교하는 것이 된다. 번지가 같다면 동일한 객체를 참조하는 것이고, 다르다면 다른 객체를 참조하는 것이다.
Stirng의 특성
String s1 = new String("Hello");
String s2= "Hello";
String s3= new String("Hello");
Stirng s4= "Hello";
1. 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있음.
s2와 s4변수에는 동일한 String객체의 번지가 저장된다. ( s2 == s4 의 결과 True)
2. s1과 s3처럼 new 연산자로 직접 객체를 생성하고 대입하는 경우,
서로 다른 String객체의 번지를 가지게 됨. (s1 == s3 의 결과 false)
문자열 리터럴로 생성하느냐, new연산자로 생성하느냐에 따라 비교 연산자의 결과가 달라질 수 있음.
3. 문자열 내용을 비교할 경우에는 .equals()사용
메모리를 비교할때는 == 로 비교한다.
String s1, s2, s3, s4;
s1 = "HELLO";
s2 = new String("HELLO");
s3 = new String("HELLO");
s4 = "HELLO";
System.out.println(s1 == s2); //false
System.out.println(s1 == s3); //false
System.out.println(s1 == s4); //true
System.out.println(s1.equals(s2)); //true
System.out.println(s2.equals(s3)); //true
System.out.println(s1.equals(s4)); //true
문자열 길이 : length()
String subject = "자바 프로그래밍";
int length = subject.length();
문자열에서 문자의 개수를 얻고 싶을땐 length()메소드 사용.
length변수에는 공백을 포함해서 8이 저장됨
//Palindrome문자열입니다 또는 Palindrome문자열이 아닙니다
String palindrome = "ABBA"; // 기러기 , SOS, 소주만병만주소,..
int size = palindrome.length();
int i;
for(i=0; i<size/2; i++) {
char c1 = palindrome.charAt(i); //앞
char c2 = palindrome.charAt(size-1-i); //뒤
if(c1 != c2) {
break;
}
}
if(i==size/2) {
System.out.println("Palindrome문자열입니다");
}else {
System.out.println("Palindrome문자열이 아닙니다");
}
문자추출: charAt()
특정 위치의 문자를 얻고 싶을때 사용. 매개 값으로 주어진 인덱스의 문자를 리턴.
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3); //결과 : '프'
자바 프로그래밍
01 2 3 4 5 6 7 8 (<-index)
문자열 잘라내기 : substring()
문자열에서 특정 위치의 문자열을 잘라내어 가져오고 싶다면 substring()메소드를 사용.
substring (int beginiIndex) : beginIndex에서부터 이후 모든 문자열 리턴.
substring (int beginiIndex, int endIndex) : beginIndex에서부터 endIndex앞까지 잘라냄.
String ssn = "880815-1234567"
string firstNum = ssn.substring(0,6); //880815 (0~5까지 인덱스)
string seconNum= ssn.substring(7); //1234567
특정 문자열의 위치를 찾고자 할때 :indexOf()
특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며 만약 찾지 못했을 경우 "-1"을 반환.
문자열 분리 : split()
여러개의 문자열로 구성되어 있을 경우, 이를 따로 분리해서 얻고 싶을 때 사용.
String[] arr = board.split(",");
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
import java.util.StringTokenizer;
public class StringTest {
public static void main(String[] args) {
String score = "54:89:30";
String[] scoreArr = score.split(":");
System.out.println("국어:"+Integer.parseInt(scoreArr[0]));
System.out.println("영어:"+ scoreArr[1]);
System.out.println("수학:"+ scoreArr[2]);
score = "54::30";
scoreArr = score.split(":");
System.out.println("국어:" + Integer.parseInt(scoreArr[0]));
System.out.println("영어:" + scoreArr[1]);
System.out.println("수학:" + scoreArr[2]);
int k = Integer.parseInt(scoreArr[0]);
int e = scoreArr[1].equals("")?0:Integer.parseInt(scoreArr[1]);
int m = Integer.parseInt(scoreArr[2]);
System.out.println("평균:" + ((float)(k+e+m)/scoreArr.length));
System.out.println("--------------");
StringTokenizer st = new StringTokenizer(score, ":");
int sum = 0; //총점
int cnt = 0; //과목수
while(st.hasMoreTokens()) { //score문자열에 :구분자로 분리할 문자열이 있는가
String s = st.nextToken();
System.out.println(s);
sum += Integer.parseInt(s);
cnt++;
}
System.out.println("평균:" + ((float)sum/cnt));
//URL구성요소 - 프로토콜://호스트명/패스?쿼리
String urlStr =
"https://n.news.naver.com/mnews/article/214/0001273928?sid=101";
parseURL(urlStr);
}
static void parseURL(String url) {
//url에서 사용하는 프로토콜을 출력하시오
} //hint : indexOf(), substring()
String[] arr = url.split("\\?"); //?구분자로 분리
String[] protocolHostPath = arr[0].split("/");
String host = protocolHostPath[2];
System.out.println("호스트값:" + host);
String path = "";
for(int i=3; i<protocolHostPath.length; i++) {
if(i>2) {
path += "/";
}
path += protocolHostPath[i];
}
if(protocolHostPath.length > 2) {
System.out.println("패스값:" + path);
}
if(arr.length == 2) {
String []query = arr[1].split("\\&");
for(int i=0; i<query.length; i++) {
String[] queryNameValue = query[i].split("=");
String queryName = queryNameValue[0];
String queryValue = queryNameValue[1];
System.out.println("쿼리변수이름:" + queryName + ", 변수값:" + queryValue);
}
}
'개발 공부 > JAVA' 카테고리의 다른 글
java 추상 클래스 / 인터페이스/ 중첩클래스 (0) | 2023.05.31 |
---|---|
상속 (형변환/다형성/overriding) (1) | 2023.05.30 |
static / 접근제어자/ getter setter/ final (KOSTA EDU) (0) | 2023.05.23 |
반복문 - for문/ while문 (0) | 2023.05.17 |
조건문 - if문 / swith문 (1) | 2023.05.17 |