JAVA 2022.07.22

sofia·2022년 7월 24일
0

JAVA

목록 보기
8/27
post-thumbnail

📗복습문제

📖배열 1

package chapter03;
// 비정방형 배열을 만들어 값 초기화하고 출력하기
//출력해야하는 결과
//35 36 37 38 39 
//45 
//55 56 57 58 
//65 66 
//75 76 77 

public class IrregularArray2 {

	public static void main(String[] args) {
		
		int n[][] = new int [5][];
		n[0]=new int [5];
		n[1]=new int [1];
		n[2]=new int [4];
		n[3]=new int [2];
		n[4]=new int [3];
		
		for (int i = 0; i < n.length; i++) {
			for (int j = 0; j < n[i].length; j++) {
				n[i][j]=(i+3)*10+(j+5); // 35~77까지 출력
				System.out.print(n[i][j]+" ");
			}
			System.out.println();
		}
		
	}

}

//	결과
//	35 36 37 38 39 
//	45 
//	55 56 57 58 
//	65 66 
//	75 76 77

📖배열 2

package chapter03;

public class MakeArray_1 {
// 일차원 배열 생성 초기화해서 값 넣은 후, 리턴해서 100을 더하는 프로그램 작성

	static int[] makeArray() {
		int temp[] = new int[10];// 일차원 배열 생성
		for (int i = 0; i < temp.length; i++) {
			temp[i] = i + 1;
		} // 초기화해서 값 부여

		return temp;

	}// makeArray는 메소드. 

	public static void main(String[] args) {
		int intArray[];
		intArray = makeArray();

		for (int i = 0; i < intArray.length; i++) {
			System.out.print(intArray[i] + 100 + " ");
		} // makeArray와 intArray 배열 공유하고 100더하는 프로그램
		
	}
	
}
		
//내가 한거(리턴 사용 안함
//   	int makeArray[] = new int[10];
//		for (int i = 0; i < makeArray.length; i++) {
//			for (int j = 0; j < makeArray.length; j++) {
//				makeArray[i] = i + 1;
//			}
//			makeArray[i] = makeArray[i] + 100;
//			System.out.print(makeArray[i] + " ");
//		}

📗예외 떠넘기기

throws

  • 메소드 선언부에 작성
    리턴타입 메소드명(매개변수,...) throws 예외클래스1, 예외클래스 2,..{ }

  • 메소드에서 처리하지 않을 예외를 호출한 곳으로 떠넘기는 역할

  • 예시

package chapter03;

public class ThrowsExample {

	public static void main(String[] args) {
		try {
			findClass();
		} catch (Exception e) {
			System.out.println("클래스가 존재하지 않습니다.");
		}
	}
	
	public static void findClass () throws ClassNotFoundException {
		Class.forName("java.lang.Stirng"); 
		//클래스를 찾아감
		// 여기선 JRE System Library에 있는 클래스를 찾는거임
		//Class.forName("aaa"); 
		// 자바 안에 있는 클래스를 찾는데, 
		//없으므로 클래스가 존재하지 않는다고 뜬다.
		//? 맞나?
	}

}

📗 클래스와 객체

📖객체

:실제로 존재하는 것, 사물 또는 개념.
쉽게 말하면 세상 모든 것이 객체(TV,의자,집 등등..)

  • 객체의 구성요소
  1. 속성(Property) - 멤버변수(variable)
  2. 기능(Function) - 메소드(method)
    ex)
 Class TV {
  	String color;
    boolean power;
    int channel;
    
    void power;
    void channelUp;
    void channelDown;
 }

📖객체의 특징

(자세한것은 추후 정리할 예정)

  • 캡슐화
    : 데이터가 유효한 값을 유지하도록, 또는 외부에서 데이터를 함부로 변경,접근하지 못하게 하도록 보호하는 것, 외부에서 불필요한, 내부적으로 사용되는 부분을 감추는 것

    ex) private 로 지정하여 외부에 노출 x
  • 상속
    : 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

    장점 - 적은 양의 코드로 새로운 클래스 작성 가능, 코드 공통적으로 관리할 수 있어서 코드의 추가 및 변경에 용이
    ⇒ 재사용성 증가, 생산성과 유지보수에 기여

  • 상속을 구현하는 방법
    새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 extends와 함께 사용 (부모로부터 확장됨을 뜻함)

    기존 Animal의 경우 속성 2개 메소드 3개이지만
    Human은 상속받은 속성 2개 + 새 속성 2개 = 속성 4개, 상속받은 메소드 3개 +새 메소드 3개 = 6개 이다.
  • 다형성
    : 하나의 객체가 여러가지 타입을 가질 수 있는 것
    ⇒ 자바에서는 한타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로서 구현

📖절차 지향 프로그래밍과 객체 지향 프로그래밍

(왼 - 절차 지향 프로그래밍
오- 객체지향 프로그래밍)

📖클래스와 객체

클래스객체
전자기기TV,라디오,전자레인지...
사람나, 너,앞집사람,옆집 사람..
붕어빵 틀구워낸 붕어빵들...

📖클래스 구성


package chapter04;

public class Circle {

		int radius;
		String name;
		
		public Circle( ) {//메소드 형태이지만 클래스 이름과 같은 메소드를 `생성자`라고 함.
			
		}
		
		
		public double getArea() {
			return 3.14*radius*radius;
		}//메소드 선언
		
		
		public static void main(String[] args) {
			Circle pizza;//pizza는 참조변수 Circle은 클래스
			// 선언만 한 상태
			pizza = new Circle(); //new연산자를 사용하여 객체(pizza) 생성
			// 이걸 2줄로 했지만 1줄로도 가능함(31번째 줄 보기)
			
			pizza.radius=10;//속성
			pizza.name="자바 피자"; //속성
			
			double area = pizza.getArea();//메소드 호출
			System.out.println(pizza.name+"의 면적은 "+ area);
			
			
			Circle dount = new Circle();
			//객체 생성
			//dount 참조변수
			dount.radius=2;
			dount.name="자바 도넛";
			area = dount.getArea();
			
			System.out.println(dount.name+"의 면적은 "+ area);
			
	}

}
package chapter04;

import java.util.Scanner;

public class Rectangle {
	
	int width;
	int height;
	// 속성 변수(필드)
	
	public int getArea() {
		return width*height;
	} //메소드 
	//return이 없으면 오류남 //int 반환타입
	
	
	public static void main(String[] args) {
		Rectangle rect = new Rectangle(); 
		//rect라는 객체 생성
		// rect는 참조변수 
		Scanner scanner = new Scanner(System.in);
		System.out.println(">>");
		
		
		rect.width = scanner.nextInt();
		//rect.width는 객체 속성
		rect.height = scanner.nextInt();
		//rect.height는 객체 속성
		
		
		System.out.println("사각형의 면적은 "+rect.getArea());
		//객체(rect)의 메소드 결과 바로 출력
		//rect.getArea()에서 rect는 객체, getArea는 메소드
		
		scanner.close();
	}

}

📖생성자

: 인스턴스가 생성될때 호출되는 인스턴스 초기화 메소드
주로 초기작업에 사용함.(쉽게 말하면 객체변수들을 초기화)

생성자의 조건
1. 생성자 이름은 클래스 이름과 동일
2. 생성자는 return값 없음(void 생략 가능)

📖기본생성자

  • 기본생성자가 없어도(코드가 없어도) 컴파일러할때 알아서 만들어서 읽는다.(생략가능한 이유)


다시 한 번더 이야기하지만
컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 '클래스내에 생성자가 하나도 없을 때'

📖This 레퍼런스

This 는 크게 2가지로 나눠진다.

  • 생성자에서 다른 생성자 호출하는 this
    (1. 생성자의 이름으로 클래스명 대신 this 사용
    2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에만 호출 가능
    두 개의 조건 만족해야함)
  • 객체 자기 자신을 가리키는 참조변수 this
    (위의 사진의 경우 2번째에 해당)

📖객체속에서 this

📗예제 문제

📖예제 문제1

package chapter04;

public class Circle2 {
	int radius;
	String name;
	
	public Circle2() {
		radius =1; name="";
	}
	
	public Circle2(int r,String n) {
		radius =r; name="n";
	}//매개 변수가 들어가면 여러개의 생성자 생성가능
	
	public double getArae() {
		return 3.14*radius*radius;
	}
	
	
	public static void main(String[] args) {
		Circle2 pizza = new Circle2(10,"자바피자");
		//객체 생성 pizza는 참조변수
		double area = pizza.getArae();
		System.out.println(pizza.name+"의 면적은 "+area);

		Circle2 dount =new Circle2();
		
		dount.name="도넛피자";
		dount.getArae();
		System.out.println(dount.name+"의 면적은 "+area);
	}
}

//어린왕자 생텍쥐페리
//춘양전 작자미상

📖예제 문제 2

package chapter04;

public class Book2 {
	String title;
	String author;
	
	void show() {
		System.out.println(title+" @@@ "+author);
	};
	
	
	public Book2() {
		this("","");
	}//
	
	public Book2(String title) {
		this(title, "작장미상");
	}

	public Book2(String title,String author) {
		this.title = title; this.author=author;
	}
	
	public static void main(String[] args) {
//		Book2 littlePirce = new Book2();//객체 생성
		Book2 littlePirce = new Book2("어린왕자","생텍쥐 페리");//객체 생성
		Book2 loveStory = new Book2("춘향전");
		Book2 emptyBook = new Book2();
		
		littlePirce.show();
		loveStory.show();
		emptyBook.show();
//		System.out.println(littlePirce.title+" @@@ "+littlePirce.author);
	}
}

//출력 결과
//어린왕자 @@@ 생텍쥐 페리
//춘향전 @@@ 작장미상
// @@@

📖예제 문제3

다음 main()메소드를 실행했을때 예시와 같이 출력되도록 TV 클래스 작성

package chapter04;

public class TV {
	String maker;
	String years;
	String inch;
	
	void show() {
		System.out.println(maker+"에서 만든 "+years+"년형 "+inch+"인치 TV");
	};
	
	
	public TV(String maker,String years,String inch){
		this.maker = maker; this.years=years; this.inch=inch;
	}
	
	
	public static void main(String[] args) {
		TV myTV = new TV("LG","2017","32");
		//TV myTV = new TV("LG",2017,32); 이렇게 하면
		//int years; int inch; 로 적어도 괜찮음/
		//
		myTV.show();
	}

}

📖예제 문제 4

소문자 알파벳 하나 입력시 감소하는 모양 만들기
예시)
소문자 알파벳 하나를 입력하시오>>e
abcd
abc
ab
a

package chapter04;

import java.util.Scanner;

public class PrintAlphabet {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("소문자 알파벳 하나를 입력하시오>>");
		String n = scanner.next();
		
		char c = n.charAt(0);
		
		//abcdef char i =i-1; c인식 하면 i=65-1;
		//아스키코드 사용
		//abc ab a
		
		// b//d //c==>b==>a
		
		for (char i = c; i >= 'a'; i--) {
			for (char j = 'a'; j < i; j++) {
				System.out.print(j); //ab//abcd
				//abc //abcde
			}
			System.out.println();
		}
		
		

		scanner.close();
	}

}

📖예제 문제 5

package chapter04;
//강사님 방법
import java.util.Scanner;

public class ArrayMinMax {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("양수 10개를 입력하세요");
		
		int[] arr = new int[10];
		
		int min = Integer.MAX_VALUE;
		//실제 그 데이터 타입이 표현할 수 있는 숫자의 범위중 가장 큰 값이 할당됨
		int max =0;
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = scanner.nextInt();
			if (arr[i]<min) {
				min = arr[i];
			}
			if (arr[i]>max) {
				max = arr[i];
			}
		}
		System.out.println("가장 작은 수는 "+min+"이고 가장 큰 수는"+max+"이고, 최소값+최대값은"+(max+min)+"입니다.");
		
		scanner.close();
	}

}

0개의 댓글