본문 바로가기

와사비크래커 IT Tip/언어

Java란

728x90
반응형

1.자바란 무엇인가.

-독립적인 플랫폼을 가지고 있으며 메모리 사용량이 적은 언어이다.

-포인트개념이없다.

-어떠한 OS(플랫폼)든 돌아 갈 수 있다.  

(1). 운영체제에 독립적이다

 JVM (자바가상머신)이 바이트코드를 해석하여 해당 운영체제가 이해할 수 있도록 변환하여

전달하기 때문에 여러 운영체제에서 사용가능하다.

(2). 객체 지향언어

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

(3). 자동메모리관리 ( Garbage Collection )

- 프로그램이 실행되면 가비지 컬렉터가 자동적으로 메모리를 관리해준다.

즉, 개발자가 메모리를 따로 관리하지 않아도 된다는 의미이다.

개발자가 프로그래밍에 집중 할 수 있는 좋은기능

(4). 멀티쓰레드 지원 ( Multi-thread )

- 보통 운영체제에따라 쓰레드의 처리방식이 다르다.

하지만, 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과 별개로 구현가능하고,

관련 풍부한 라이브러리 JAVA API 를 제공하므로 구현이 쉽다.

(6). 네트워크와 분산처리를 지원한다.

(5). 동적로딩 ( Dynamic Loading ) 을 지원

- 실행시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용 할 수 있는 강점을 가지고 있다.

유연한 어플리케이션 작성에 용이.

 

절차 지향언어 procedure-oriented language

절차적 지향 언어

프로그램이 위에서부터 절차(순서)대로 실행되어 흘러가는 것을 의미하며 함수를 만나 다른곳으로 건너갔다 하더라도 그 전체 흐름은 절차에 맞게 흘러감.++

 

2.객체지향이란 OPP(Object Oriented programming)

 

1.코드의 재 사용성이 높다.

새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2.코드의 관리가 용이하다.

코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3.신뢰성이 높은 프로그래밍을 가능하게 한다.

제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며

코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지 할 수 있다.

 

객체지행 언어는 객체 안에 데이터(속성)과  매소드가 존재 한다. 때문에 그 데이터가 변한다고 해도 데이터가 포함된 객체만 수정하면 되기 때문에 불편함이 적다.

 

(1).추상화

(2).상속

(3).캡슐화

‘실제 기능’은 숨기고 ‘접근할 방법’만 노출하는 것을 말한다.

객체를 작성할 때 숨겨야 하는 정보 (private)와 공개해야 하는 정보 (public)을

구분하여 작성

객체의 사용자는 기능만 알고 사용하며 어떻게 처리되는지는 은폐한다.(information Hiding)

객체의 정보와 손상방지.

데이터가 바뀌어도 다른 객체에 영향양을 안줌.결합도 약함.

이식성이 좋다.

객체를 부품화 처리가능

(4).다형성

 

(5)은닉화

클래스

객체를 정의해 놓은 것, 객체의 설계도-> 기능+속성

프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성되는 것을 말함

객체와 인스턴스

클래스로부터 객체를 만드는 과정은 인스턴스화라고 하며, 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고한다.

3.overrid와 overrodin을 각각 설명하고 차이점을 보여주는 예제 작성

 

오버로딩-기존에 없는 새로운 메서드를 정의하는 것(new)

오버로딩의 조건

1.메서드 이름이 같아야한다.

2.매개변수의 개수 또는 타입이 달라야한다.  by type 에 따라간다.

3.매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.

(리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.)

4.plintln이 대표적인 오버로드

 

장점: 같은 기능을 한다고 쉽게 예측

      메서드의 이름 절약.

 

오버라이딩-상속받은 메서드의 내용을 변경하는 것(change, modify)

오버로딩과 오버라이딩의 가장 큰 차이점

오버로딩은 하나의 클래스에서 일어나며,기존에 없는 새로운 메서드를 정의하는 것(new)

오버라이딩은 상속받은 하위클래스에서 상위클래스의 메소드를 재정의하는 것임

오버로딩과 오버라이딩예제를 구분해서 찾아보시길 바랍니다.

조건- 이름 같아야함,매개변수가 같아야함,리턴타입이 같아야함

 

4.Constructor가 무엇인가 설명하고 궁극적인 목적을 보여주는 예제 작성

 

생성자 Constructors

 

목적

instance변수초기화

상속x

리턴값x

생성자오버로드(인자만다르게) 여러개 가능

복사생성자가능rn값이 없고 /강제로 호출 불가

 

인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’

1.생성자의 이름은 클래스의 이름과 같아야 한다.

2.생성자는 리턴 값이 없다.

연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것은 아니다.

 

Card c =new Card();

1.연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.

2.생성자 Card()가 호출되어 수행된다.

3.연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.

 

생성자에는 기본 생성자와 매개변수가 있는 생성자가 있습니다.

 

 

5.inheritance가 무엇이고 할베,아베,나와 관련된 예제를 작성

inheritance(상속)  -> is ~ a ~은 ~이다.

★재사용성

★협업(객체를 만들어 놓고 그객체를 다쓰는 것이 아니라, 필요할때 객체를 모아서 하나로사용)

-유기적으로 객체를 연결한것. (중복코드 방지,코드의 재사용성)

-목적:재사용성 아버지꺼는 내꺼다.

-단점: 필요 없는것 까지 가지고 오게 된다.(이것을 보완 한 것이 adapter 패턴)

-상위는 하위를 참조할수 없다. 호출할수도 없다.

-하위는 상위를 가져다 사용할수 있음 ->이때문에 상호교환 할 수 있게만든것이(오버로드)

 

 

 

 

 

 

 

 

 

6.abstract와 interface를 설명하고 interface(동물) 추상클래스(고양이과,개과)를 이용해 집을 지키는 강아지 클래스를 구현하는 예제를 작성하시오.

추상과 인터페이스의 차이도 서술

 

추상 클래스:객체들의 공통된 속성 +기능을 뽑아내는 것

 

추상클래스(abstract)

확장을 목적으로 만든것. 즉 후손을 통해서 완성이 되어야 한다.

특징 : 생성자 있다.

-설계를 목적으로 만들어진 클래스

-일반 메서드와 추상메서드가 공존한다!

-미완성 메서드(abstract가 있으면 ) 클래스도 미완성 클래스이다 (abstract)

-추상메서드가 하나도 없어도 추상클래스 선언이 가능 하다.

-아버지가 추상이면 아들도 추상이어야 한다.

-선조의  추상 메서드는 후손에서 무조건 구현을 하여야한다. 

        추상클래스는 Person p =new Person(); ->사용불가하다.

                     Person p =new Student(); ->사용 가능

-가져갈것은 선조에서 구현을 해놓고 가져가고  바꿔야 할 부분은 오버라이드 한다.

 

인터페이스interface란 일종의 추상클래스

추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 더 높음.

일반 메서드 + 멤버변수 구성원 가질 수 없음.

오직 추상메서드+상수만 멤버로 가질 수 있음.

미완성 설계도

 

7.접근제어자에 대하여 설명하고 관련 예제를 작성

(access modifier)

접근 제어자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

 

제어자

같은 클래스

같은 패키지

자손클래스

전체

public

o

o

o

o

protected

o

o

o

 

default

o

o

 

 

private

o

 

 

 

 

 

 

사용이유

-외부로부터 데이터를 보호하기위하여.

-외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서

 

10.this와 super를 설명하고 관련예제를 작성하시오

super

super.변수명, super();

super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는참조변수

상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다.

조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고는 super와 this는 근본적으로 같다.

인스턴스메서드에서만 사용할 수 있다.(static X)

 

super()는 조상 클래스의 생성자를 호출하는데 사용

super()-조상클래스의 생성자로 this()와 마찬가지로 역시 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는데 사용하지만, super()는 조상클래스의 생성자를 호출하는데 사용된다.

조상 클래스 생성자의 호출은 클래스의 상속관계를 거슬러 올라가면서 계속 반복된다. 마지막으로 모든 클래스의 최고 조상인 object클래스 생성자까지 가서야 끝이난다.

따라서 Object를 제외한 모든 클래스의 생성자는 첫 줄에 반드시 자신의 다른 생성자 또는

조상의 생성자를 호출해야한다. 그렇지않으면 컴파일러가 자동적으로 ‘super();'를 생성자의 첫 줄에 삽입한다.(생략되어있다고 보면 된다.)

 

this

this()는 같은 클래스의 다른 생성자를 호출 하는데 사용.

이거,메모리에 올려있는 상태를 가르침

 

this는 해당되는 클래스의 주소를 지정해주는 키워드

public void class Ex(); -> Ex()안에 Ex this가 생략

this를 이용하여 해당클래스 인스턴스 변수 초기화

 

this(매개변수);를 입력하면 해당 매개변수가 있는 생성자 찾아감.

this는 참조변수로 인스턴스 자신을 가르킴.

가르킨다 라는 의미고 가르킬수 있다라는 것은 메모리상에 로드되었기 떄문.

 

11.다형성에 대하여 논하시오 관련 예제

다형성이란 ‘여러 가지 형태를 가질 수 있는 능력’을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 즉, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.

오버로딩,오버라이딩,has a 상속

 

 

 

12.Exception 오류에 대해 설명하고 관련예제

ArrayIndexOutOfBoundsException()

연산오류

 

arithmeticException(int value)

배열값초과

 

numberFormatException(String value)

변수타입이 다른타입으로 들어오는경로

 

nullPointException()

생성하지 않은 값사용시

 

stringIndexOutOfBoundsException(String value,int x,int y)

스트링함수사용시 배열크기 벗어남

IOException

 

CloneNotSupportedException

 

StringIndexOutOfBoundsException

색인이 음수이거나 문자열크기가 클

UserException

13.static  instance 의 차이점을 설명.

 *static과 관련된 예제를 만들어보시오.

instance

객체를 만드는과정 (new)

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

객체와 같은 의미지만 어떤 클래스로부터 만들것인지 강조 하기때문 더욱 구체적

인스턴스의 멤버변수는 서로 다른값을 유지 할 수있다.

메모리 heap에 올라감.

 

static

new 하기전에 미리 메소드에 올라감

끝날때 소멸된다.

static 영역과 클래스 영역은 같다!

final 붙이면 더이상 가변이 아니기 때문에 상수

final 앞에는 static 같이 사용한다

정적 바인딩(변하지 않음)

static 메소드안에서는 instance변수 접근 호출 전부안됨.

생성자에서 static으로 접근가능하다.

static에서는 this 사용불가.

클래스. 으로 찾아갈수 있음.

 

static 멤버변수 -모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.

               -클래스변소는 인스턴스를 생성하지 않고도 사용 가능하다.

               -클래스가 메모리에 로드될 때 생성된다.

        메서드 -인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 된다.

               -static메서드 내에서 인스턴스 멤버들을 직접 사용불가.

 

176p.

메소드영역 - static이 올라감(클래스변수)

stack 영역 - 멤버변수와 메소드 호출시 ->작업끝나면 자동으로 비워짐

heap 인스턴스-생성공간.

 

 

String하고 Stringbuffer의 차이

StringBuffer하고 StringBuild와의 차이

 

String 클래스는 저장할때매다 메모리가 새로 할당됨 (수정안됨)

String s="abd";

           s="a";

 

버퍼= 주소를 리턴하기떄문에 그자리에서 추가가 가능하다.(동기화 필요할떄) (수정됨)

StringBuilder sb=new StringBuilder();

           StringBuilder temp=sb.append('b');

           System. out.println(sb== temp);

결과 TRUE

빌드 =동기화 필요가없이 가볍게 쓸때는 빌드사용(수정됨). .

 

 

 

변수

-local(지역) -초기화 필요함

-instance   -초기화 필요 없음

-static

값을 저장할 수 있는 메모리상의 공간 즉!data를 담는 공간

논리형 boolean

문자형 char

정수형 byte short int long

실수 float double

 

변수 Byte,Short 크기

byte<short<int<long<float<double

1바이트<2바이트<4바이트<8바이트 <실수형 4Byte<실수형 16Byte

 

기본형(primitive) 값

boolean,  byte<short<int<long<float<double

                char

정수기에 물을담는것

원시타입

1byte=8bit

 

참조형(Reference)-주소

Byte(클래스)

byte b=new Byte(10);

                   ->wraper(감싸다)

                       unBoxing (자바 1.5버전부터)

 

 

 

 

형변환이 되는것 과 안되는 것을 구분 지어서 정리해 놓을 것

byte a=10;

byte b=11;

byte c=(byte)(a+b);  ->기본적으로 연산할 때는 int로 되기 때문에 byte형변환

boolean을 제외한 나머지 7개는 기본형 간에는 서로 형변환이 가능하다.

큰 자료형에서 범위가 작은 자료형으로의 변환은 값손실이 발생한다.

 

안되는지와 왜 되고 왜 안되는 지

메소드 오버로딩이 이루어 질 때 형변환이 어떻게 일어나는지

 

이클립스 variable 확인

연산자 우선순위 기억

반응형

'와사비크래커 IT Tip > 언어' 카테고리의 다른 글

[JAVA] 조건문과 반복문  (0) 2020.08.31
[JAVA] 연산자  (0) 2020.08.31
[JAVA] 변수  (0) 2020.08.27
[JAVA] JAVA의 소개  (0) 2020.08.27
자바(Java) 자료타입  (0) 2020.07.28