면접준비(1)자바언어의 특징

Tae hyun·2023년 3월 27일
0

면접준비

목록 보기
1/9

출처: 자바의 정석3판(남궁성 저자)
p 2~5
p 310~361
자바언어의 특징
1. 운영체제에 독립적이다.
:자바의 개발환경과 배포환경이 다를 경우에도, 프로그램을 다시 컴파일 할 필요없이 실행가능함
->자바가상머신(jvm)을 통해서 가능함

JVM: Java Virtual Machine을 줄인 것. 자바로 작성된 애플리케이션은 jvm에서만 실행됨. java 어플리케이션은 os종속적인 일반 어플리케이션과 달리 JVM하고만 상호작용을 하기 때문에 다른 os에서도 프로그램의 변경없이 실행 가능함.
*단, JVM은 OS에 종속적임

2.객체지향언어
-상속, 캡슐화, 다형성이 잘 적용된 객체지향 언어

1)상속:
기존 클래스를 재사용하여 새로운 클래스를 작성하는 것. 상속은 코드의 재사용성을 높이고, 코드의 중복을 제거해 프로그램의 생산성과 유지보수에 크게 기여함
-상속 구현방법
: 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써주면 됨.

package pocketmon;

public class PocketMon {
	protected String name;
	protected int hp;
	protected int exp;
	protected int lv;
	
	public void eat() {
		System.out.println(name+"밥먹음");
	}
	public void sleep() {
		System.out.println(name+"잠잠");
	}
	public boolean play() {
		System.out.println(name+"논다");
		return true;//살았나?
	}
	public boolean exc() {
		System.out.println(name+"운동함");
		return true;//살았나?
	}
	public void levelCheck() {
		System.out.println(name +"레벨체크");
	}
	public void printInfo() {
		System.out.println(name+"상태확인");
		System.out.println("hp:"+hp);
		System.out.println("exp:"+exp);
		System.out.println("lv:"+lv);
	}
package pocketmon;

//캐릭터의 공통사항
//name, hp, exp, lv
//eat(), sleep(), play(), printInfo(), levelCheck() . 부모 클래스에 있는 기능이라 업캐스팅 해서 한번에 관리 가능
public class Pikachu extends PocketMon {
	
	public Pikachu() {
		hp = 30;
		name = "piachu";
		System.out.println(name+" 생성됨");
		
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		super.eat();
		hp += 5;
	}
	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		super.sleep();
		hp +=10;
	}

	@Override
	public boolean play() {
		// TODO Auto-generated method stub
		super.play();
         hp -= -8;//hp감소
         exp += 8;
         levelCheck();
         return hp>0;//hp가 0초과 이어야 살아있음
	
	}

	@Override
	public boolean exc() {
		// TODO Auto-generated method stub
		super.exc();
		     hp -= 15;//hp감소
	         exp += 10;
	         levelCheck();
	         return hp>0;//hp가 0초과 이어야 살아있음
	}

	@Override
	public void levelCheck() {
		// TODO Auto-generated method stub
		super.levelCheck();
		if(exp>=20) {
			lv++;
			exp -= 20;
			System.out.println(name + "레벨 1 증가됨");
		}
	}
	public void 백만볼트() {//부모클래스에 없는 기능. 쓰려면 다운캐스팅 해야함
		System.out.println("백만볼트 공격");
	}
	
	

}

2)캡슐화
외부로부터 데이터를 보호하고, 외부에는 불필요한,내부에서만 사용되는 부분들을 감추는 것
-접근 제어자를 통해 가능함
멤버변수를 private이나 protected로 제한하고, getter와 setter를 이용해 값을 읽고 변경할 수 있는 public 메서드를 제공해 간접적으로 멤버 변수의 값을 다룰 수 있게 함.

package 도서관리
public class bookVo {
	private int num;
	private String title;
	private String type;
	private String author;
	private String publisher;
	
	public bookVo(){}

	public bookVo(int num, String title, String type, String author, String publisher) {
		this.num = num;
		this.title = title;
		this.type = type;
		this.author = author;
		this.publisher = publisher;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getPublisher() {
		return publisher;
	}

	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}

	@Override
	public String toString() {
		return "bookVo [num=" + num + ", title=" + title + ", type=" + type + ", author=" + author + ", publisher="
				+ publisher + "]";
	}
	
	

}

접근제어자의 종류:
public,protected,default,private
(1)public: 접근 제한이 전혀 없음
(2)protected: 같은 패키지 내, 다른 패키지의 자손 클래스에서 접근 가능
(3)default: 같은 패키지 내에서 접근 가능
(4)private:같은 클래스 내에서만 접근 가능

접근 범위가 넓은 쪽에서 좁은 쪽의 순 나열
public>protected>(default)>private

3)다형성
:한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하는 것
=조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 함

package oop3;

import java.util.ArrayList;
//메서드 재정의를 통한 다형성 구현
class Car{
	public String name;
	public Car(){
		name="Car";
	}
	public void horn() {
		System.out.println("빵빵");
	}
}

class 엠뷸런스 extends Car{
	public 엠뷸런스(){
		name = "엠뷸런스";
	}
//메서드 재정의: 상속받은 메서드를 하위 클래스에 적합하게 수정
//메서드 껍데기는 그대로 내용만 수정
	@Override
	public void horn() {
		System.out.println("삐오삐오");
	}
	public void 환자이송() {
		System.out.println("환자를 이송함");
	}
	
}
class 소방차 extends Car{
	public 소방차(){
		name = "소방차";
	}

	@Override
	public void horn() {
		System.out.println("에~~~엥");
	}
	public void 불끈다() {
		System.out.println("불을 끈다");
	}
	
}

class 경찰차 extends Car{
	public 경찰차(){
		name = "경찰차";
	}

	@Override
	public void horn() {
		System.out.println("삐뽀삐뽀");
	}
	public void 범죄자이송() {
		System.out.println("범죄자를 이송함");
	}

	
}

public class CarMain {
	public static void main(String[] args) {
		//업캐스팅: 객체는 자식, 타입 부모인 캐스팅. 부모 클래스에 정의된 멤버만 사용가능
		//Car 타입으로 업캐스팅 됨
		ArrayList<Car> list = new ArrayList<>();
		list.add(new Car());
		list.add(new 엠뷸런스());
		list.add(new 소방차());
		list.add(new 경찰차());
		
		
		for(Car c:list) {
			System.out.println(c.name+"의 소리");
			c.horn();
			
		
		//하위 클래스에 추가된 멤버를 사용하려면 다운캐스팅 해야함
		//instanceof: 객체 타입 비교 연산자.
		//양 항의 타입이 일치하면 true, 아니면 false 반환
		if(c instanceof 엠뷸런스) {
			((엠뷸런스)c).환자이송();
			
		}else if(c instanceof 소방차) {
			((소방차)c).불끈다();
		}else if(c instanceof 경찰차) {
			((경찰차)c).범죄자이송();
		}
		}

	}

}

실행결과

3.이식성이 높다
-java 언어로 개발된 프로그램은 jre만 설치되어있으면 모든 운영체제에서 실행이 가능함
출처:https://akdl911215.tistory.com/312

  1. 자동 메모리 관리
    자바로 작성된 프로그램이 실행되면, 가비지컬렉터가 자동적으로 메모리를 관리해 줌

  2. 네트워크와 분산처리를 지원
    네트워크 프로그래밍 라이브러리(java api)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있게 지원함

  3. 멀티쓰레드 지원
    자바에서 개발되는 멀티쓰레드 프로그램은 일반적인 멀티쓰레드와 달리 시스템과 관계없이 구현가능하며. 관련된 라이브러리가 제공되므로 구현이 쉽다. 또, 자바 인터프리터가 여러 쓰레드에 대한 스케줄링을 담당함

  4. 동적 로딩 지원
    자바는 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 있다. 또, 일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 됨

profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글