본문 바로가기

기록/자바_국비

[배운내용정리] 1120 자바 국비교육

728x90

2020년 11월 20일 9시 ~ 15시 30분 zoom으로 수업 진행

 

11월 24일 프로그래밍 시험


package com.poly.test06;

import java.util.Scanner;

public class MTest {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("도형을 선택해주세요 [1 : 원 ,2 : 삼각형 , 3 : 사각형] : ");
		int select = sc.nextInt();
		
		Area ar = null;
		switch(select) {
			case 1:
				ar = new Circle();
				break;
			case 2:
				ar = new Triangle();
				break;
			case 3:
				ar = new Square();
				break;
		}
		
		ar.make();
		ar.print();
		
	}

}

 

package com.poly.test06;

public abstract class AreaImpl implements Area {
	
	private String result;
	
	@Override
	public void print() {
		System.out.println(Area.print + " " + result);
		
	}

	@Override
	public abstract void make();//추상 메소드로 만들어버리자
	//클래스 선언부에도 빨간줄이 생김
	//무조건 구현해줘야 하는 기능인데 추상메소드로 만들어버려서 빨간줄
	//해당 클래스 자체를 abstract로 선언해줘야함!
	//빨간 줄 사라짐 편안 ㅎㅎ
	
	public void setResult(String result) {
		this.result = result;
	}

}

 

package com.poly.test06;

public interface Area {

	//static 상수 필드인것임!!
	//생략된거임!
	//인터페이스에서는 static 상수필드랑 추상메서드밖에 못 만듦
	String print = "면적 : ";
	
	public void print();
	public void make();
	
}

 

package com.poly.test06;

import java.util.Scanner;

public class Circle extends AreaImpl{
	
	@Override
	public void make() {
		Scanner sc = new Scanner(System.in);
		System.out.print("반지름 : ");
		int rad = sc.nextInt();
		
		double res = rad*rad*Math.PI;
		
		//super.setResult(res+"");
		super.setResult(String.format("%.2f", res));
	}

	@Override
	public void print() {
		
	}

}

 

package com.poly.test06;

import java.util.Scanner;

public class Square extends AreaImpl{
	
	@Override
	public void make() {
		Scanner sc = new Scanner(System.in);
		System.out.print("가로 : ");
		int x = sc.nextInt();
		System.out.print("세로 : ");
		int y = sc.nextInt();
		int res = x*y;
		
		setResult(String.valueOf(res));
	}
	
	@Override
	public void print() {
		System.out.print("사각형의 ");
		super.print();
	}

}

 

package com.poly.test06;

import java.util.Scanner;

public class Triangle extends AreaImpl{
	
	@Override
	public void make() {
		Scanner sc = new Scanner(System.in);
		System.out.print("밑변 : ");
		int x = sc.nextInt();
		System.out.print("높이 : ");
		int h = sc.nextInt();
		double res = (double)x*h/2;
		
		setResult(String.format("삼각형의 %.2f", res));
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		
	}

}

package com.poly.test07;

public class MTest {

	public static void main(String[] args) {
		MyProfile m = new MyProfile("asd", "010-1234-1234");
		
		m.jobLoc("서울시 강남구");
		
		m.display();
	}
	
}

 

package com.poly.test07;

public class Profile {
	
	private String name;
	private String phone;
	
	public Profile() {}
	public Profile(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}
	
	public void printProfile() {
		System.out.println("이름 : " + name);
		System.out.println("전화번호 : " + phone);
	}

}

 

package com.poly.test07;

public class MyProfile extends Profile implements Job, Display{

	private String loc;
	
	public MyProfile() {}
	public MyProfile(String name, String phone) {
		super(name, phone);
	}
	
	@Override
	public void display() {
		super.printProfile();
		System.out.println("회사 주소 : " + loc);
		System.out.println("회사 직종 : " + jobId);
	}

	@Override
	public void jobLoc(String loc) {
		this.loc = loc;
	}

}

 

package com.poly.test07;

public interface Display {

	public void display();
	
}

 

package com.poly.test07;

public interface Job {

	String jobId = "IT 관련";
	
	public void jobLoc(String loc);
	
}

 

String 클래스

 문자열 값 수정 불가능

 수정 시 수정된 문자열이 새로 할당되어 새 주소를 넘긴다

 

StringBuffer 클래스

 문자열 값 수정 가능

 수정, 삭제등이 기존 문자열에 수정되어 적용

 기본 16문자 크기로 지정된 버퍼를 이용하며 크기 증가 기능

 쓰레드 safe 기능 제공 (성능 저하 요인)

 -> 현 작업이 끝날 때까지 다른애들이 대기해야 함

  

StringBuilder 클래스

 StringBuffer와 동일하나 쓰레드 safe 기능을 제공하지 않음

 

StringTokenizeer 클래스

 String 클래스에서 제공하는 split() 메소드와 같은 기능을 하는 클래스

 생성 시 전달받은 문자열을 구분자로 나누어 각 토큰에 저장

 예시

import java.util.*;

 

public class TestStringTokenizer{

 

           public static void main(String[] args){

                     String str = "AA|BB|CC";

                     StringTokenizer st = new StringTokenizer(str, "|");

                     while(st.hasMoreTokens()){

                                System.out.println(st.nextToken());

                     }

           }

}

 

Wrapper 클래스

기본 데이터 타입을 객체화 해주는 클래스

Primitive Data Type

Wrapper Class

boolean

Boolean

byte

Byte

char

Character

short

Short

int

Integer

long

Long

float

Float

double

Double

 

String 을 기본 자료형으로 바꾸기

 int i = Integer.parseInt(“3”);

 char c = “abc”.charAt(0);

 

기본 자료형을 String으로 바꾸기

 String i = Integer.valueOf(5).toString();

 


package com.ch01.string;

public class Run {

   public static void main(String[] args) {
      //method1();
      method2();
   }
   
   public static void method1() {
      //1. 문자열 리터럴로 생성
      String str = "abc";
      String str1 = "abc";
      
      System.out.println(str);//abc
      System.out.println(str1);//abc
      System.out.println(str.hashCode());//96354
      System.out.println(str1.hashCode());//96354
      
      System.out.println("=====================================");
      
      //2. 생성자
      String str2 = new String("abc");
      String str3 = new String ("abc");
      
      System.out.println(str2.hashCode()); //결과는 똑같이 나온다, 96354
      System.out.println(str3.hashCode()); //같은 값을 가지고 있기 때문이다, 96354
      
      System.out.println("=====================================");
      
      System.out.println(System.identityHashCode(str));//798154996
      System.out.println(System.identityHashCode(str1));//798154996
      System.out.println("--------------new 사용후-----------");
      System.out.println(System.identityHashCode(str2));//681842940
      System.out.println(System.identityHashCode(str3));//1392838282
      //new 연산자는 값이 다르게 나온다. //즉 new는 객체를 새롭게 생성한다.
   }
   
   public static void method2() {
	   
	   String str = "abc";
	   
	   //charAt(인덱스)
	   System.out.println(str.charAt(1));//b
	   
	   //concat(합치기)
	   System.out.println(str.concat("def"));//abcdef

	   //contains(포함여부)
	   System.out.println(str.contains("c"));//true
	   
	   //equals(비교)
	   System.out.println(str.equals("abc"));//true
	   
	   //length(길이)
	   System.out.println(str.length());//3
	   
	   System.out.println("==================================");
	   
	   String str1 = "a,b,c";
	   String str2 = "햄서터/서울시송파구/학생/기요미";
	   
	   //split(문자구분)
	   String[] strArr = str1.split(",");
	   for(int i=0; i<strArr.length; ++i) {
		   System.out.print(strArr[i] + "\t");
	   }
	   //a	b	c	
	   System.out.println("");
	   
	   String[] str2Arr = str2.split("/");
	   for(int i=0; i<str2Arr.length; ++i) {
		   System.out.print(str2Arr[i] + "\t");
	   }
	   //햄서터	서울시송파구	학생	기요미	
	   System.out.println("\n");
	   
	   
	   //toUpperCase(대문자로) / toLowerCase(소문자로)
	   System.out.println(str1.toUpperCase());//A,B,C
	   
	   //subString(잘라내기)
	   System.out.println(str2.substring(4, 10));
	   //햄서터/서울시송파구/학생/기요미
	   //01 23 456 78910...
	   //subString(4, 8) 4부터 시작해서 8앞까지 출력하는 것
	   
	   
	   //trim(앞 뒤 공백제거)
	   String str3 = "         hi    ";
	   System.out.println(str3);//         hi    
	   System.out.println(str3.trim());//hi
	   
	   System.out.println("=======================\n");
	   
	   //문자 가운데 공백 지우기
	   String str4 = "Hello Java World";
	   String str4MiddleTrim = "";
	   
	   //내가 푼 것
	   for(int i=0; i<str4.length(); ++i) {
		   if(str4.charAt(i) == ' ') {
			   continue;
		   }
		   else {
			   str4MiddleTrim += str4.charAt(i);
		   }
	   }
	   System.out.println(str4);//Hello Java World
	   System.out.println(str4MiddleTrim);//HelloJavaWorld
	   
	   //선생님 풀이
	   System.out.println(str4.replaceAll(" ", ""));//HelloJavaWorld
	   
	   
   }

}

 

package com.ch03_stringTokenizer;

import java.util.StringTokenizer;

public class Run {

	public static void main(String[] args) {
		String str = "햄서터,29,서울시 송파구,남";
		
		StringTokenizer st = new StringTokenizer(str, ",");
		//StringTokenizer => 
		System.out.println("st.countTokens : " + st.countTokens());
		//st.countTokens : 4
		
		while(st.hasMoreTokens()) {
			System.out.print(st.nextToken() + "\t");
		}
		//햄서터	29	서울시 송파구	남	
		
		while(st.hasMoreTokens()) {
			System.out.print(st.nextToken() + "\t");
		}
		//출력 x 앞에서 토큰의 마지막 위치에 커서를 옮겨놓았기때문에 두번째 while()문이 작동하지 않음
		//다시 사용하려면 새로운 StirngTokenizer 객체를 생성해주어야 한다
		
		StringTokenizer st1 = new StringTokenizer(str, ",");
		System.out.println(st1.nextToken());
		System.out.println(st1.nextToken());
		System.out.println(st1.nextToken());
		System.out.println(st1.nextToken());
		//System.out.println(st1.nextToken()); 토큰이 더 없어서 에러납니다
		
	}

}

 

package com.ch04_wrapperClass;

public class Run {

	//Boxing : 기본 자료형 -> wrapper 클래스 객체 (오토 박싱)
	//unBoxing : wrapper -> 기본 자료형 (오토언박싱)
	
	public static void main(String[] args) {
		
		//boxing 기본 자료형을 래퍼 클래스 로 객체화 시키는 것
		int no = 10;
		Integer i = new Integer(no);		//기본 타입 데이터 no(10)을 객체화 시키는 작업
		Integer i2 = Integer.valueOf(no);	//기본 타입 데이터 no(10)을 객체화 시키는 작업
		Double d = new Double(11.0);		//기본 타입 데이터 11.0 을 객체화 시키는 작업
		
		System.out.println(i.equals(i2));	//true
		System.out.println(i.compareTo(i2));//0
		//compareTo() 객체 비교 메서드
		//-> 음수면 i2가 큰 것, 양수면 i가 큰 것, 0은 둘이 같을 때
		//equals() 는 객체의 값을 비교한다
		
		System.out.println("====================================");
		
		//AutoBoxing
		Integer i3 = 10;
		Double d2 = 5.0;
		
		//UnBoxing
		//래퍼클래스 객체를 기본 자료형으로 바꾼다
		int pi = i.intValue();
		double dp = d.doubleValue();
		
		//AutoUnboxing
		int a = i;
		int b = i2;
		System.out.println(a+b);//20

		abox(20);//20
		//다형성 적용됨
		//int 형이 오토 박싱이 되었고, 결과 출력이 가능해짐
		//int - 오토박싱 -> Integer  - 다형성 -> Object
		
		
		System.out.println("--------------");
		Integer sti = new Integer("12");
		int sti2 = new Integer("300");//오토언박싱
		//Integer 객체가 오토언박싱을 통해 int형(기본자료형)으로 변환되어
        //int형 변수 sit2 에 저장된다.
		
		int ii = Integer.parseInt("3");
		//
		double dd = Double.parseDouble("0.2");
		boolean b1 = Boolean.parseBoolean("true");
		
		//1.5버전 이후 가능
		ii = Integer.valueOf("3");
		dd = Double.valueOf("0.2");
		
		String s1 = Integer.valueOf("3").toString();
		String c = Character.valueOf('a').toString();
		
		
	}
	
	public static void abox(Object obj) {
		//Object 형으로 받아야해서 기본 타입은 못 받음
		//래퍼 클래스 사용해서 객체화 시켜줘야 함
		System.out.println(obj);
	}
	
}