본문 바로가기

JAVA/기본다지기

JAVA 7일차 필기

class 홍길동

int 키 = 180;

int 나이 = 32;

List 취미 = new ArrayList("요리", "언어공부");

List 직업 = new ArrayList("강사", "프로그래머");

(전역변수)


(생성자) 홍길동(int 나이(매개변수)){

this.나이 = 나이;

}


(메소드, 함수) void 수업(String 학원(매개변수)){


}

전역변수 : 클래스의 성격, 클래스가 가지고있는 자원.

              중요한 변수. 객체를 사용하기 위한 조건.


생성자는 return값이 없다. 생성자는 클래스의 자원은 아니다.


면접장에서..


▶객체지향 언어 자바의 특징에 대해서 설명하시오.(객체지향 언어의 원칙)

프로그래밍 언어의 궁극적인 목표는 사람과 똑같이 생각하는 프로그램을 만드는 것.

객체지향 언어의 특징은 크게 "캡슐화", "다형성", "상속성" 3가지로 나타난다.

§캡슐화(Encapsulation)와 데이터 은닉

 객체의 내부에서 구체적으로 어떠한 과정이 일어나는지 모르더라도 어떤 메서드를 사용하면 어떠한 결과를 얻을 수 있다. 라는 개념으로 프로그래밍을 한다.

 곧, 메서드에 어떠한 기능이 구현되어 있는지를 모른다 하더라도, 원하는 결과를 얻을 수 있다면 그 메서드로 코딩을 함으로써 더욱 코딩하기에 수월한 것.

 객체 내부의 기능은 프로그래머가 구현한 프로그래머의 재산이므로 보안을 요함.

 객체 외부에서 임의로 데이터에 접근하면 데이터가 변환 될 우려가 있기 때문에 이를 방지하기 위해서 데이터 은닉이 존재한다.

 이 캡슐화와 데이터 은닉은 접근지정자(publicprotectedprivate)를 이용하여 구현할 수 있다.

§다형성

 다형성은 이름이 동일한 메소드, 함수이더라도 각기 다른 기능을 구현할 수 있는 특성이다.

 매개변수를 다르게 함으로써 다른 기능을 구현하도록 하는 오버로딩, 같은 메소드라 하더라도 새롭게 재정의하여 사용하는 오버라이딩이 있다.

§상속성

 객체지향의 가장 대표적인 특징. 임의의 개체의 성격을 다른 객체에서 상속받아 자신의 기능에 더해서 상속받은 객체의 기능까지 가질 수 있다. 상속해주는 클래스는 부모 클래스, 상속받는 클래스는 자식 클래스라고 한다. 상속에는 extends 와 implements 2가지 종류가 있으며,  extends는 클래스와, 추상클래스를 상속받는 데에 사용하고, implements는 인터페이스를 사용받는 데에 사용한다. 인터페이스는 다중상속이 가능하다. (extends는 1개 클래스만 상속이 가능하다), 상속을 막으려면 default, private 접근지정자를 이용하면된다.

§추상화

 설계도를 이용하여 비슷한 객체를 찍어낼 수 있는 기준이 되도록 한다.


▶interface와 abstract(추상) 클래스의 특징에 대해서 설명하시오.

§공통점

최소한 1개 이상의 추상메소드를 가진다.

추상메소드를 구현하지 않고서는 객체를 가질 수 없다.

상속을 받는다면 추상메소드의 기능은 반드시 구현해야만 한다.

§차이점

추상클래스는 추상메소드가 최소한 1개 이상 존재하는 클래스를 말한다.

따라서, 일부는 구현된 메소드가 있을 수 있고, 기능은 없이 형식만 있는 추상메소드도 있다.

extends로 상속받아서 사용한다.


interface는 모든 메소드가 추상메소드로만 구성되어있는 추상클래스의 극단적인 형태이다.

implements로 상속받아서 사용한다.

interface는 다중상속이 가능하여 다른 클래스에서도 상속을 받을 수 있다.

(나중에 추가 및 수정)


▶I.O.(입출력)시 예외처리를 하는 이유에 대해서 설명하시오.

 입출력시 발생하는 치명적인 오류로 인해서 프로그램이 정지하는 것을 방지하기 위해서.

(나중에 추가 및 수정)


▶생성자(constructor)의 용도에 대해서 설명하시오.

 클래스는 단순한 설계도에 지나지 않기 때문에 클래스를 객체로 만들어 주기 위해서는 생성자를 호출해야함.

따라서 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 하며, 별도로 생성하지 않을 경우에는 default 생성자가 컴파일 시 자동으로 생성된다.

 생성자는 return값이 없다.

 생성자가 호출될 때 마다 인스턴스가 초기화되므로 인스턴스 초기화가 필요할 때 계속해서 생성해 줄 수 있다.

 클래스를 재사용할 수 있도록 해주며, 매개변수가 있는 생성자의 경우 인스턴스마다 각각 다른 값으로 초기화 되어야 할 경우에 유용하게 사용할 수 있다.

(나중에 추가 및 수정)


객체는 사용과 재사용이 가능하며, 쉽고 효율적이다.

(객체지향 언어의 원칙을 잘 지킨 객체가 좋은객체 = 인간의 사고를 그대로 구현할 수 있는 객체)


class와 instance의 차이


예를 들어 '개'라는 클래스가 있다고 한다면

진돗개 = new 개( );

치와와 = new 개( );

말티즈 = new 개( );

등으로 여러가지 생성자로 객체화 할 수 있는데, 이것을 인스턴스라 한다.


class(클래스)의 instance(인스턴스)라 하면 곧, object(객체)와 같은 말이다.


자바는 데이터 타입이 정확한 언어이다.

void(반환값이 없다) a(){

}

List a(){

return new ArrayList().add;

}


class A

int b(){

return 35;

}

main(){

A a = new A();

int 나이 = a.b(); <- 35가 반환되므로 나이에 담을 수 있다.

}


메소드(함수)


형태 public static int printState(매개변수){ }

 public, protected, private

 접근지정자를 쓸 수 있다. 선언하지 않을 수도 있다.-> 캡슐화

 static

 선언 할 수도 안 할 수도 있다.

 void, int, String, double, boolean ...

 데이터타입을 선언 할 수 있다.

 함수이름

 소문자로 시작하는 것이 권장사항. 클래스와 구별하기 위해서

 (매개변수)

 매개변수를 선언 할 수 있다.


ch05method 패키지에 새로운 클래스 L05MainMethod.java 생성

package com.javalesson.ch05method;

public class L05MainMethod {
    public static void main(String[] args) {
        //String[] args는 어플리케이션이 실행될 때 실행단계에서 필요한 상태를 보내는 곳
        for(String e: args){
            System.out.println(e);
        }//foreach
        //Run -> ▼버튼 -> Run Configurations -> L05MainMethod의 Arguments선택
        //Program Arguments에 초기값 입력
    }//main end
    /*
     * main 메서드
     * main 메서드를 가지는 class를 -> application, 객체
     * main 메서드가 없는 class -> 객체
     * main 메서드가 있는 class만 java라는 명령어를 실행할 수 있다.
     * main 메서드가 있는 class만 JVM을 호출한다.
     * JVM -> ; 단위로 코드를 실행한다. => 쓰레드(실행단위)가 존재한다.
     * main 메서드는 쓰레드를 가진다.
     *
     * main이 public 접근지정자(외부 어디에서든 사용 가능)을 가지는 이유
     * ->main을 실행하는 곳은 외부이기 때문에
     *
     * main이 return타입으로 void를 가지는 이유
     * ->main에서 실행하는 코드 자체가 반환하기 때문에 void타입을 가진다.
     * ->반환 값을 받는 곳은 어플리케이션 내부인데 main자체가 어플이기 때문에 반환값을 가질 수 없다.
     *
     * main이 static으로 stack 영역에 저장되는 이유.
     * ->JVM이 stack영역에 있기 때문에
     * ->static으로 선언되면 JVM이 실행 될 때 stack메모리에 값을 할당하기 때문에
     * ->실행할 코드를 stack에 가지고 있는 것이 동작이 빠르다.
     * ->마치 기본데이터 타입을 stack영역에 저장하는 것과 같다.
     */
}//class end


angular js

'JAVA > 기본다지기' 카테고리의 다른 글

JAVA 9일차 필기  (0) 2016.08.11
JAVA 8일차 필기  (0) 2016.08.10
JAVA 6일차 필기  (0) 2016.08.08
JAVA 5일차 필기  (1) 2016.08.05
JAVA 4일차 심화  (0) 2016.08.04