본문 바로가기
JAVA 수업/java 수업 기록

[5/19] 수업 내용 (객체지향언어, 메모리 사용영역, 변수, String, equals, split, StringTokenizer)

by 예림220 2023. 5. 19.

#참고 내용(수업 교재) 이것이 자바다

(강사님) 교재 추천 '헤드퍼스트'- 자바 (그림)

 

[객체 지향 프로그래밍] 

- 객체 지향 프로그래밍과 절차 지향 프로그래밍의 차이점 

1. 개발 속도는 절차 지향 언어 개발자가 빠를 수 있다. 

2. 절차 지향 언어로 개발된 소스 코드는 결합도가 높다. 

 

1의 예시(예시)작업: '원을 회전시킨다' 를 하는 객체/절차 지향 프로그래밍 개발자의 개발 순서 

* 절차 지향 언어 개발자

위의 작업을 수행하기 위해 기능(회전시킨다)에 포커스를 맞춤.  (객체지향보다 소스개발이 빠를 수 있음) (

(c언어) 

void rotate(int radius){

//반지름값 활용

//원을회전한다

 ------------------------------

-사용자입장

rotate(5); 

 

*객체 지향 언어 개발자: 1. 원을 먼저 만든다. 

(기능을 포함하는 '것(object)'을 먼저 만들어야 되니까 개발 속도가 절차지향개발언어에 비해 느림) 

class Circle{

 int radius;

  void rotate(){

 //반지름값활용 회전한다

  }

  void print(){

  }

}

// 재료(멤버변수)와 향후 사용할 수 있을 기능(메서드)들을 미리 만들어 놔야 한다. 

 ------------------------------

-사용자 입장 

Circle c = new Circle(); //객체 생성

c.radius=5;

c.ratate();

 

2의 예시(예시)작업: 버전 2 / '사각형을 회전시킨다'를 하는 객체/절차 지향 프로그래밍 개발자의 개발 순서 

 

* 절차 지향 언어 개발자

> 제공자쪽 소스 내용이 바뀌기 때문에 (함수 선언구, 메서드 ...) 사용자쪽 소스 코드도 바꿔야 사용이 가능하다.

기능을 완성하는 것이 목적이기 때문에 버전이 업데이트 되었을 때, 기존의 것이 재사용이 안되고 기존의 소스 코드를 고쳐야 한다. (절차 지향 언어: 소스간의 결합도가 높다) 

 

* 객제 지향 언어 개발자 

> 사용자쪽 소스코드에 기존의 것을 그대로 사용하면서 새로 사용할 소스코드를 추가하면 된다. 

 

- 자바파일 실행순서 [메모리 사용영역을 그림으로 표현]

(예시: LottoUser) 

경로: java - cp bin LottoUser

 

public class LottoUser {

public static void main(String[] args) {

 

Lotto lotto = new Lotto();

(아래 파란색 줄안에 있는 소스들은 Lotto.class에서 가져옴)

int []lotto = new int[6];

public void make() {...}

public int get(int index) {...}

public int[] get() {...}

public void print() {}

 

lotto.make();

(아래 소스들은 Lotto.class에서 가져)

public void make() {

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

lotto[i] = (int) (Math.random()*45+1); //1<= ~ <46

//중복 처리하기

for(int j=0; j<i; j++) {

if(lotto[i]==lotto[j]) {

i--;

break;

}

}

}

}

make 메서드 사용이 끝나면 아래의 그림처럼 make메서드에서 사용했던 모든 변수들이 스택에서 사라진다.

Lotto lotto1 = new Lotto();

lotto1.make();

lotto1.print();

[변수]

- 변수구분

Lotto lotto = new Lotto();//lotto 참조형(타입의) 지역변수

int []valueAll = lotto.get();//int [] valueAll 참조형(배열이기 때문에)타입의 지역변수

- 변수 

자료형: 참조형 / 기본형

위치: 멤버변수 / 지역변수 / 매개변수 

 

메모리 저장 위치

자동초기화

 - 멤버변수는 자동초기화가 된다. 

(배열은 생성과 동시에 자동초기화가 된다.) 

-지역변수와 매개변수는 자동초기화되지 않는다.

System.out.printf(v); 

> v의 값이 없기 때문에 오류가 발생한다. (변수의 값이 자동초기화 안되서)

(지역변수와 매개변수는 자동초기화 되지 않기 때문에 값을 대입하지 않을 경우 오류가 발생한다.)

 

[문자열] 

s2와 s4는 같은 값으로 채워진다.

sop (s1==s2); // false

sop (s1==s3); // false

sop (s1==s4); // false

sop (s2==s4); // true

 

equals 메서드 

sop (s1.equals(s2)); // true

sop (s1.equals(s3)); // true

sop (s1.equals(s4)); // true

sop (s4.equals(s2)); // true

 

[문자열 메서드]

charAt() : 문자열에서 특정 위치의 문자를 얻을 때 사용하는 메서드

length() : 문자열에서 문자의 개수를 얻고 싶을 때 사용하는 메서드

replace() : 문자열에서 특정 문자열을 다른 문자열로 대체할 때 사용하는 메서드

substring() : 문자열에서 특정 위치의 문자열을 잘라내어 가져오고 싶을 때 사용하는 메서드 

indexOf() : 문자열에서 특정 문자열의 위치를 찾고자 할 때 사용하는 메서드 

split() : 문자열을 따로 분리해서 얻고 싶을 때 사용하는 메서드

split과 StringTokenizer의 차이

token의미: 소스코드를 작은 조각으로 분할하는데 사용되는 유의미한 단위

//둘다 문자열을 분리해주는 라이브러리인데 split은 무조건 분리, tokenizer는 토큰으로만 분리함