본문 바로가기

-Java

StringBuffer , 다차원 배열

반응형

자바강의 -2015.03.12

■ 학습목표

String Buffer

다차원배열 가변배열

메서드오버로딩

메서드로직배열

객체

 

■스트링클래스는 한번 생성되어있으면 반드시 힙에 저장되어있기 때문(불변적 법칙) +=을 이용해서만들면

레퍼런스변수가 끊어지기 때문에 gc이 청소하는 쓰잘데기없는 일이 발생함! .

 

Buffer는 원래 배열의 개수 +2 만큼 자동으로 생성된다.

StringBuffer  sb=new StringBuffer();

 

자바 언어의 특징

객체 지향언어이다. (상속,캡슐화,다형성,추상화,인터페이스)

한번만 작성하면 jvm이 설치되어있는 그 어디라도 사용할 수 있다.

 

재사용화 캡슐>POJO

 

*객체

 

클래스(설계도)와 객체(설계도를 토대롬 만들어내는 와플) 객체지향(와플틀)

클래스만드는법

Public class[classname]{}

접근제한자 클래스 클래스이름

객체지향언어> 코드간에 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성하는 것.

ex)has a 관계 is a관계(상속)

코드의 중복을 피해야한다! >리팩토링을 해야됨

클래스의 정의와 용도

클래스란 객체를 정의해 놓은것

클래스는 객체를 생성하는데 사용한다.

p.151 클래스로 부터 객체를 만드는 과정을 클래스의 인스턴스화

인스턴스 (넌스태틱메서드)

p.149 has a관계는 결합도가 높다!

반환 값이 없고, 메인 안의 값을 주입을 할 때 void를 쓴다

멤버와 지역변수가 만났을 때 항상 우선순위는 로컬변위에 있는 지역변수에 있다.

멤버필드의 초기값은 false이다.

 

속성은 반드시 많은것으로 설계한다.

프로그램 호출이 언제올지 모르기 때문에 메인은 클래스에서 독립시키는게 좋다.

 

private>>정보의 은닉화  

자원의 정보은닉 - 메서드의 정보 은닉

현재 클래스에서 정보 은닉화 목적으로 정의한 매서드

사용자가 호출할 필요가 없는 메서드이며, 내부적인 로직에 의해서

호출이 되는 매서드를 정의 할 때 접근 제한자를 private로 주고

다른 메서드나 생성자에서 호출하도록 설계한다.

 

 

Ex1_StringBuffer 실행파일

Colored By Color Scripter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

package ex1;

 

/**

 *

 * @author Administrator

 */

 

// 스트링버퍼 

// 메모리를 낭비하는 코딩을 방지하기 위해서 제공되는 클래스

public class Ex1_StringBuffer {

    public static void main(String[] args) {

        StringBuffer sb= new StringBuffer();

        System.out.println("용량 "+sb.capacity());//용량을 알수있다. 16으로 

        System.out.println("길이"+sb.length());//아직만들어진게 없어서 길이는 0

        System.out.println("-----------------");

        

       //append 명령어로 스트링버퍼에 추가를함

        sb.append("엄성렬");

        System.out.println("용량 "+sb.capacity());//16으로 

        System.out.println("길이"+sb.length());//3

        System.out.println("---------------");

        sb.append("가나다라마바사아차카타파하가");        

        System.out.println("용량 : "+sb.capacity());// 16+16+2 =34

        System.out.println("길이 : "+sb.length());//17

        System.out.println("-----------------");

        sb.insert(sb.length(),"ㅇㅇㅇㅇㅇ"); 

        // insert메서드를 사용해서 원하는 버퍼의 위치(첫번째는 0부터)

        // 해당 문자열을 추가   있다

        System.out.println("용량 : "+sb.capacity());// 16+16+2 =34

        System.out.println("길이 : "+sb.length());

        //22  //컨트롤 클릭하면 메서드 확인 가능 

        System.out.println("-----------------");

        //결과를 String 클래스로 반환받아서 생성

        String res=sb.toString();   

        //스트링버퍼는 모든자료를 스트링으로 변환해줄수있다.

        System.out.println(res);   

        //+=연산자는 기능이 현저히 떨어진다효율감소 (gc 일이 생김)

        System.out.println(sb);

        //Object(객체인자로 받을  있기 때문에 직접 받아도 !

    }

}

코드 실행 및 결과

run:

용량 16

길이0

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

용량 16

길이3

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

용량 : 34

길이 : 17

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

용량 : 34

길이 : 22

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

엄성렬가나다라마바사아차카타파하가ㅇㅇㅇㅇㅇ

엄성렬가나다라마바사아차카타파하가ㅇㅇㅇㅇㅇ

BUILD SUCCESSFUL (total time: 0 seconds)

 

Ex2_Array 실행파일

Colored By Color Scripter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

package ex1;

 

/**

 *

 * @author Administrator

 */

public class Ex2_Array {    

    public static void main(String[] args) {

        int[][] test; //다차원 배열을 선원 

        test = new int[2][2];

        /*

         int [][] test= new int [1차원배열의수][ 1차원 배열의 길이];

         */

        //초기화

        test[0][0] = 1000;

        test[0][1] = 900;

        //---------------------------------1 초기화 

        test[1][0] = 100;

        test[1][1] = 200;

        //---------------------------------1 초기화 

        System.out.println("1차원 배열의  : "+test.length);

        System.out.println(" 1차원 배열의 길이"+test[0].length);

        System.out.println(" 1차원 배열의 길이"+test[1].length);

    }

}

코드 실행 및 결과

run:

1차원 배열의 수 : 2

1차원 배열의 길이2

1차원 배열의 길이2

BUILD SUCCESSFUL (total time: 0 seconds)

 

Ex1_MyClass 실행파일

Colored By Color Scripter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

package ex2;

 

/**

 *

 * @author Administrator

 */

 

public class Ex1_MyClass {

//아는것을 설계해본다!!!

    

    private String myName;

    private int pay;

    public void userName(String name){

        myName=name;

    }

    public void userPay(int p){

        pay=p;

    }

    public String PrintRes(){

        StringBuffer sb=new StringBuffer();

        sb.append("당신의 이름은 : ").append(myName).append("\n\r");

        sb.append("당신의 급여는 : ").append(pay).append("\n\r");

        return sb.toString();

        // String 으로 반환을 시켜야 되기때문에 toString으로 바꿔줘야된다.

    }    

}

코드 실행 및 결과

Main 이 없어 jvm을 돌릴수없다! Mymain에서 실행할수있음!

 

Ex1_MyMain 실행파일

Colored By Color Scripter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

package ex2;

 

/**

 *

 * @author Administrator

 */

public class Ex1_MyMain {

        public static void main(String[] args) {

        //객체로 선언  생성

        Ex1_MyClass ref;

        ref = new Ex1_MyClass();

        //Ex1_MyClass 접근하기 위해서 참조 변수 ref  사용해서

        //  영역에 생성된 Ex1_MyClass 자원에 접근한다

        ref.userName("엄성렬");

        ref.userPay(500000000);

        String result = ref.PrintRes();

        System.out.println(result);

        //멤버로 직접 입력할수도있지만 private 걸었기 때문에 

        // default  protected  가능 

        /*

        ref.myName="하하호호";

        ref.pay=9000;        

        result = ref.PrintRes();

        System.out.println(result);

                */

    }

}

코드 실행 및 결과

run:

당신의 이름은 : 엄성렬

당신의 급여는 : 500000000

 

BUILD SUCCESSFUL (total time: 0 seconds)

 

 

반응형