본문 바로가기
BackEnd/Java

JAVA_StringBuffer, StringBuilder, DataType변환(parse), 접근자

by telecaster0 2021. 4. 21.

오전

Stringbuffer와 Stringbuilder의 차이

StringBuffer는 멀티스레드 O, StringBuilder는 멀티스레드 X

 

일반적으로 String은 할당된 메모리를 가져가는 반면, 이 둘은 공통적으로 가변성을 가지고 있음.

중복,수정,삭제가 많은 데이터의 경우 StringBuffer, StringBuilder를 쓰는게 메모리 효용성에 좋다.

 

-

 

데이터타입을 바꾸는 상황에 대해 공부했다.

* 숫자=>문자

     : 모든 숫자는 문자로 변경이 가능하다

     :  숫자 + "" -> 문자로 변환된다.       ex). 2+ "" = > 문자 2   로 바뀜.

* 문자=>숫자 

     : 숫자형식을 가지고 있는 데이터만 가능.

 

*boxing & unboxing. 같은 숫자 타입일때. 데이터방식을 동일하게 만들어주는 상황(Stack메모리)

    int i;

    int=10;

    short s;

    s=(short)i;     

short은 2byte, int는 4byte의 용량을 가지고 있다.  int->short  큰용량에서 작은용량으로 바뀌는 경우  큰값의 앞에(바뀌는 데이터타입방식을 괄호로 기재해줌으로써 변환이 가능하다.

위 과정을 거치면

    i=s;   가 성립.

* 문자(heap) 에서  숫자(stack)으로 변환하는 경우.

   String str = "70" ;

   int i;

   i = Integer.parseInt(str);  < 이 함수를 써주면 문자(String)을 숫자(Int)값으로 변환 가능하다.!

 

또한 계산기 메인화면에서 실행하시겠습니까? Y/N과정에서  반복문을 배웠다.

while(condition) {

   true_exec_statement;

 

}

  **반복 탈출할 기준을 설정

 

실습에서 적용은 이렇게 이루어졌다.

//실행여부출력//

String query;

while(true) { 

output("실행하시겠습니까? y/n");

//실행여부 입력//

query = input();

if(query.equals("y") || query.equals("n")) {

 

break;

 

  

 

*MVC Pattern

 Model -- 데이터 활용 --> 데이터관리 , 비즈니스 로직

 View

 Controller

 

*  Access Modifier : Restrict 접근제한,  class 앞에있는!
 *   public  --> 모든 외부 접근 허용
 *   private --> 모든 외부 접근 불허, 내부에서는 접근 가능
 *   protected --> 상속자로부터의 접근만 허용
 *   default --> 같은 패키지에 속해있는 클래스에서만 접근 가능

 

 

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

 

내일 오전으로 계산기 실습이 종료된다. 그런의미에서 여태배운것들, 내가 생각하는 개념들을 정리해보자.

i) Loader.  : 프로그램 실행기 개념이랄까 

ii)Operator : 백엔드부분. 실제 계산이 이루어지는 파트이며 연산장치.(코딩)

iii)InputOutput : 프론트엔드 부분. 사용자에게 보여지는 화면 이라 볼 수 있는 파트이며 입력과 출력

 

Loader <=====InputOutput<==========Operator 이런식으로 연결되어있다.

 

Operator같은경우

 

i)

클래스=>생성자를 만들고

public String controller(String operate, String number1,String number2)

String(문자) 컨트롤러를 통해   연산, 숫자값1,숫자값2를 선언해준 뒤

number1,number2를 int값으로 데이터형식을 바꿔준다.

num1=Integer.parseInt(number1);

그리고 int result; 연산결과를 선언&할당해준다.

 

 

ii)

그리고 if 조건문을 통해 1을 누르면 덧셈, 2를 누르면 뺄셈, 3을 누르면 곱셈, 4를 누르면 나누기 실행으로 만들어준다

if(operate.equals("1")) { result = this.plus(num1,num2); else if {

이런식이고 this는 밑에있는 함수를 그대로 써준다는 뜻이다.

마지막줄엔 return result+""; 로 정리해준다. 연산으로 끝이 아닌 값을 되받아야하므로 return함수를 써주고 

 

int(숫자값)인 result에 ""(공백)을 더함으로써  결과의 데이터방식은 문자값이 된다

 

iii)

사칙연산을 각각의 method를 통해 만들어주자.

한 method에는 한가지의 기능을 담는것이 효용성이 높고, 객체지향의 장점을 살릴수있다.(아마도?)

 

public int plus(int number1, int number2) {

return number1 + number2;

}

소괄호는 파라미터값 이며 중괄호안에 return값은 계산결과를 되받야하므로 작성해준다.

 

 

--

 

이번엔 InputOutput 사용자입출력단에 대해 알아보자.

 

내가 제일 애를 먹었던.. 정리가 좀 어려웠던 파트다. 

 

클래스를 만들어주고 생성자사이에 field 영역에

i)

타이틀화면 

연산화면

스캐너(잘 모름)을 만들어주었다

 

그리고

ii)

생성자 부분엔

초기화, 객체생성이 이루어지는데  

title=new String();  <- 타이틀화면 객체생성

yeonsan=new String();  <--연산화면 객체생성

StringBuffer s1 = new StringBuffer();  s1이라는 이름으로 Stringbuffer를 지어준다.

그리고 타이틀, 연산화면에넣을 문자들을 

s1.append("++++++++++++++++++++++++++++++++++");

s1.append("                                calculator                       ");

대충요런식으로 넣어주고 마지막으로

title=to.String();   문자열로 리턴하는 메소드를 이용해준다.

 

그리고 마지막엔 controller();

 

컨트롤러를 이용해 화면순서를 용이하게 만들것이다.

 

 

iii)

public void controller () {

//타이틀출력//

output(title)

//실행여부출력//

output(실행ㄱ?)

String query 

while 문

//실행여부입력//

querty = input()

query를 if else문에 넣어 y누르면 실행 n누르면 비실행

//타이틀출력//

//숫자문구출력//

//숫자입력//

String number1 = input()

//연산메뉴출력//

 

//연산메뉴입력//

String oper = input()

//숫자문구출력//

//숫자입력//

String number2 = input()

 

//연산요청 연산자// ((연산을 이루어지게 하는 opetare를 선언 할당할것이다.)

Operator op = new Operator ();      => Operator 클래스와 연결됨.

//사용자 선택에따른 연산분기//

 

if문을사용해 1= 덧셈 2=빼기 3=곱셈 4=나눗셈

if(oper.equals("1") || ....

result=op.controller(oper,number1,number2);    ==>Operator에 있는 클래스의 콘트롤러. oper(연산메뉴입력)과 넘버1,넘버2를 통해 연산.  저 세값들은 Operator의 String Controller값에 들어있는것과 연결.!

 

 

------

(iv)사용자입력메소드

public String input() {

String number1 = new String();

number1 = scannr.next();  <--몰라 이건

return number1 ;

 

 

(v)사용자 출력 메소드

public void output(String text) {

System.out.println(text);

}

'BackEnd > Java' 카테고리의 다른 글

JAVA_배열(Array)  (1) 2021.04.30
JAVA_Substring, Length (유효성 검사)  (0) 2021.04.26
JAVA_Boolean Type  (0) 2021.04.22
JAVA_실행단위(Class,Method,Void-Return Type)  (1) 2021.04.20
JAVA_데이터타입, 힙&스택 데이터  (1) 2021.04.19