본문 바로가기
2022-2/자바

자바 중간고사

by 철없는민물장어 2022. 10. 26.
728x90
반응형

01- 자바 소개

 

자바는 범용언어이며 특히 network환경에 강한 특징을 가지고 있다.

자바는 C++의 preprocessor, pointer, 다중상속, 구조체, 전역변수, goto문, 연산자 중복 등의 기능을 제외하여 언어의 복잡성을 제거함

automatic garbage collection 기능을 제공함

 

객체지향

객체지향은 우리의 실 세계와 유사한 프로그램 방식이다.

자바는 Object - Oriented language이다. 자바 프로그램의 모든 요소들은 object(객체)로 표현된다.

객체지향은 소프트웨어의 재사용과 정보의 캡슐화같은 많은 장점을 제공한다.

 

object

속성을 나타내는 데이터, 

데이터를 변경하거나 조작할 수 있는 메소드(method)로 구성

 

Class

object는 항상 class로부터 생성된다. 즉 class는 object를 생성하는 template

Class로부터 생성된 객체를 instance라고 한다.

정보처리의 주체는 class가 아니라 object이다.

 

자바언어의 특징

Distributed 환경에 적합

자바는 internet 또는 network를 통하여 효율적으로 수행될 수 있도록 설계되었다.

자바는 다른 컴퓨터에 있는 원격 객체들을 호출할 수 있는 RMI기능을 제공함

 

Interpreter에 의해 실행

자바 소스는 JVM(Java Virtual Machine)에서 실행될 수 있는 Bytecode로 번역되며, 번역된 Bytecode는 바이트 코드 해석기가 있는 어떠한 기종의 컴퓨터 환경에서도 실행될 수 있다.

자바는 compiled interpreted language임

 

컴파일 기법: 프로그램이 컴파일러에 의해 0과1로 구성된 이진 파일로 번역된 다음, 번역된 파일이 컴퓨터에서 실행되는 기법

Interprete기법: 프로그램을 한 줄씩 번역한 다음 바로 실행시켜 결과를 나타내는 방식(실행파일을 만들지 않음)

 

이 두 기법을 합친 하이브리드 기법이 자바에 적용됨

 

플랫폼: 프로그램이 실행되는 hw, sw 환경. 기존의 컴퓨터에 JDK(자바디벨롭먼트킷)만 설치하면 됨.

 

견고함: 포인터, 다중상속 등의 복잡한 것을 없애 견고하게 다양한 플랫폼에서 실행될 수 있게 함

secure함: 개발환경과 실행환경이 분리되어 있음

architecture neutral로 설계된 자바는 높은 portability를 제공함.

효율적인 수행

멀티스레드

다이나믹(오버로드,오버로딩)

 

뭐 대충 자바가 좋다는 뜻;;

 

public class Example1025 {
	public static void main(String args[]) {
		System.out.println("첫번째 실습;");
	}
}

객체지향의 장점

문제를 쉽고 자연스럽게 프로그래밍(모델링)가능함

==>생산성 향상

프로그램 모듈을 재사용할 수 있음

프로그램의 확장 및 보수가 용이함

 

object는 data + method로 구성됨

class AddFish{
	int c;
	public int add(int a,int b) {
		c = a+b;
		return c;
	}
}

public class Example1025{
	public static void main(String args[]) {
		int sum;
		int x,y;
		x = Integer.parseInt(args[0]);
		y = Integer.parseInt(args[1]);
		AddFish afish = new AddFish();
		sum = afish.add(x,y);
		System.out.println(sum);
	}
}

명령행매개변수를 이용한 예제

Integer.parseInt(args[0])을 이용하여 스트링을 인테져로 바꾸었음

 


자바기초문법

JVM이 설치 된 OS라면 자바 클래스파일 실행 가능

자바 프로그램 구성요소

키워드: 이미 예약되어 있는 단어. (int, short, static, this, for, if, do . . .)

 

fianl 변수는 상수 변수로, 한번 대입한 값은 변경불가

출력과 입력, 조건문, 반복문, 주석, 연산자

다알지?

 

import java.util.Scanner;

public class Example1025{
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		String name;
		int stNum;
		int gender;
		
		System.out.print("이름입력해:");
		name=sc.next();
		System.out.println("학번은");
		stNum = sc.nextInt();
		System.out.println("젠더");
		gender = sc.nextInt();
		
		System.out.println("이름은"+name+"이구");
		System.out.println("학번은"+stNum+"이거구");
		if(gender==1) {
			System.out.println("남자예요");
		}
		else {
			System.out.println("여자예요");
		}
	}
}

system.out.print()

if문

scanner를 사용해보는 시간이었음.


3-2 객체지향개념

 

 

main()메소드는 JAP에 반드시 있어야 하는 특수한 메ㅗㅅ드

프로그램 실행시 자동으로 실행됨

public class q02 {

	public static void main(String[] args) {
		float sum;
		sum=0;
		for(int i=0;i<args.length;i++) {
			sum+=Float.parseFloat(args[i]);
		}
		System.out.println("sum = "+sum);
		System.out.println("avg = "+(sum/args.length));
	}

}

명령행매개변수를 받아 합을 구하기

 


상속

기존의 클래스를 활용. 새로운 속성이나 메소드ㅡㄹ 추가하여 기존 클래스를 확장가능.

계층관계

 

캡슐화

숨겨야 하는 정보(private)와 공개해야 하는 정보(public)을 구분하여 작성

사용자능 기능만 알고 사용하며 어떻게 처리되는지는 은폐됨

 

공개된 interface를 통해서만 object에 접근가능

캡슐화의 장점:

객체에 포함된 정보의 손상과 오용을 막음

조작 방법이 바뀌어도 사용방법은 바뀌지 않음

독립성이 유지됨

이식성이 좋음

새로운 프로그램에 부품처럼 사용가능

 

Message

object에게 일을 시키는 행위

message를 받을 object의 이름(주소), method이름, 매개변수 3가지 요소로 구성됨

 

ex) addfish.add(x,y);

 

계층구조에서 message처리

소속 클래스에서 메소드 탐색 후 없으면 상위클래스로 이동하여 탐색~

class Super1{
	int rs;
	public int add(int x,int y) {
		rs=x+y;
		return rs;
	}
}
class Sub1 extends Super1{
	public int sub(int x,int y) {
		rs = x-y;
		return rs;
	}
}

public class Example1025{
	public static void main(String args[]) {
		Sub1 obj = new Sub1();
		System.out.println(obj.add(10,20));
	}
}

extends로 간단하게 상속 가능

 

 


다형성

class Circle5 extends Shape{
	void draw() {
		System.out.println("써클");
	}
}
class Rect extends Shape{
	void draw() {
		System.out.println("렉트");
	}
}
abstract class Shape{
	abstract void draw();
}
public class Example1025{
	public static void main(String args[]) {
		Shape[] obj = new Shape[3];
		obj[0] = new Circle5();
		obj[1]= new Rect();
		obj[2] = new Rect();
		
		for(int i=0;i<3;i++) {
			obj[i].draw();
		}
	}
}

추상클래스는 abstract class로 정의

추상메소드는 abstract void draw(); 이런식으로 몸통이 없음


기초문법2

배열 선언하기

 

int [] arr = new int[10];

int[][] arr = new int [10][20];

int arr[]={0,1,2,3,4,5,6,7,8,9};
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class ArrayPrac01 {	
	public static void main(String[] args) {
		Apple a = new Apple();
		int room[][] = new int[4][4];
		int operator = 0;
		int roomNumber = 0;
		boolean isExitProgram = false;
		
		Scanner scanner = new Scanner(System.in);
		
		final int ENTER_ROOM   = 1;
		final int EXIT_ROOM    = 2;
		final int SHOW_ROOM    = 3;
		final int EXIT_PROGRAM = 4;
		
		// 숙박실 개수 세기
		int roomCount = 0;
		
		// 배열 초기화 진행
		for(int i=0; i<4; i++) room[0][i] = 0;
		// 초기화된 배열의 첫번째 원소를 복사하여
		// 나머지 원소에 복사 진행
		for(int i=1; i<4; i++) 
			System.arraycopy(room[0], 0, room[i], 0, 4);
		
		// 숙박실 개수 세기
		for(int i=0; i<4; i++) 
			roomCount += room[i].length;
		// 숙박실 개수 출력
		System.out.println("저희 호텔의 최대 숙박실 수는 " + roomCount + "입니다.");
		
		while(!isExitProgram) {
			System.out.println();
			System.out.println("1. 숙박");
			System.out.println("2. 퇴실");
			System.out.println("3. 조회");
			System.out.println("4. 종료");
			System.out.print("작업을 선택하시오(1~4):");
			operator = scanner.nextInt();
			
			switch(operator) {
			case ENTER_ROOM:
				System.out.print("숙박호실 입력:");
				roomNumber = scanner.nextInt();
				if(room[roomNumber/100-1][roomNumber%100-1]==1)
					System.out.println("이미 예약됨.");
				else room[roomNumber/100-1][roomNumber%100-1] = 1;
				break;
			case EXIT_ROOM:
				System.out.print("퇴실호실 입력:");
				roomNumber = scanner.nextInt();
				if(room[roomNumber/100-1][roomNumber%100-1]==0)
					System.out.println("빈방임.");
				else room[roomNumber/100-1][roomNumber%100-1] = 0;
				break;
			case SHOW_ROOM:
				for(int floor = 0; floor<4; floor++)
					System.out.println(Arrays.toString(room[floor]));
//				System.out.println("□ : 숙박가능, ■ : 숙박불가");
//				for(int floor=0; floor<4; floor++) {
//					for(int _room=0; _room<4; _room++) {
//						if(room[floor][_room] == 0)
//							System.out.print("□ ");
//						else System.out.print("■ ");							
//					}
//					System.out.println();
//				}
				break;
			case EXIT_PROGRAM:
				System.out.println("프로그램을 종료합니다.");
				isExitProgram = true;
				break;
			}			
		}
	}
}

		byte b = 127;
		System.out.println(b);

바이트는 0~127까지 되는듯. 1바이트임

 

		byte b =127;
		byte i = b+1; //오류. byte와 int 연산이안된대
		short is = b+1; //오류 마찬가지
		float f = 0.1f; //float은 소수는 뒤에 f를 붙여 소수임을 명시
		double d=0.1;
		boolean boo =1; //오류. true/false만 가능
		char c = 65;
		char z = 'A';

 

한정자

클래스 생성시 한정자 사용

public

지정없을시 default: 같은 패키지 내의 클래스들만 접근ㄱㅏ능

final: 상속불가

abstract: 추상메소드

 

멤버 변수 선언

[public/private] [static/final] 변수명 변수명;

static 변수는 클래스변수임. 클래스의 모든 객체가 공유함

728x90
반응형

'2022-2 > 자바' 카테고리의 다른 글

입출력,버퍼,파일입출력  (1) 2022.11.01
상속,오버라이딩,super(),final,abstract  (0) 2022.11.01
Object, String, StringBuffer  (0) 2022.10.21
Exception  (0) 2022.10.20
3. 객체지향  (0) 2022.10.20

댓글