반응형
SMALL

객체지향 프로그래밍(Object-Oriented Programming)

좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로, 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것. 객체는 변수와 메소드를 그룹핑한 것이다. 

프로그래밍의 기본은 중복을 제거하는 것이다.덧셈 기능을 1000번 하는 것보다 "더하기"를 메소드로 만들면 코드 양도 줄어들고 문제가 발생해도 원인 파악이 쉽다. 입력값을 변수화 시키고 메소드들로 합계와 평균을 구하면 코드 양을 줄일 수 있다.

클래스

변수와 메소드가 많아지면 코드가 복잡해지게 된다. 따라서 연관되어 있는 변수와 메소드들을 함께 또 묶어서 "계산 기능"을 만든다. 이 로직들의 모임을 우리는 클래스(Class)라고 부른다.

클래스는 연관되어 있는 변수와 메소드의 집합이다.
class Calculator { // 중괄호로 영역을 표시한다. 계산 기능을 묶은 클래스
 	int left, right;
      
    public void setOprands(int left, int right){ // 변수
        this.left = left;
        this.right = right;
    }
      
    public void sum(){ //합계 내는 메소드
        System.out.println(this.left+this.right);
    }
      
    public void avg(){ //평균 내는 메소드
        System.out.println((this.left+this.right)/2);
    }
}

인스턴스

클래스는 일종의 설계도다. 클래스는 말 그대로 기능이 어떻게 동작하는지에 대한 설명이다. 이걸 사용하는 것은 new 라는 키워드와 함께한다. new Calculator()은 클래스 Calculator를 구체적인 제품으로 만드는 명령이다. 정확히는 클래스에 써있는 설계에 따라 복제본을 만들어서 복제한 클래스를 입맛대로 제품으로 만드는 것이다. 이렇게 만들어진 구체적인 제품을 인스턴스(instance)라고 부른다. 마치 데이터타입처럼, 사용자 정의의 데이터 타입의 Calculator를 만들었다고 생각하면 쉽다. 제품은 인스턴스, 설계도는 클래스 기억하기!

클래스가 구체적인 실체인 인스턴스가 되었을 때, 그것을 객체라고 부른다.

생성자

인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. new 를 통해 인스턴스 생성 시에 실행해야할 초기 작업도 여기서 진행한다. 메소드처럼 클래스 내에 선언되지만 메소드와 달리 리턴값이 없다.(메소드는 리턴값이 없으면 void를 쓰지만 생성자는 그냥 아무것도 적지 않는다)

1. 생성자의 이름은 클래스의 이름과 같아야 한다.
2. 생성자는 리턴 값이 없다.

new는 인스턴스를 생성하고, 생성자는 인스턴스 변수들의 초기화에 사용된다. (초기값을 넣어줌)

모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다. 사실, 원래 모든 클래스에는 하나씩 있어야하지만 그동안 클래스에 생성자를 정의하지 않아도 인스턴스 생성이 되었던 이유는 컴파일러가 제공하는 '기본생성자'가 있기 때문이다. 컴파일 할 때, 소스파일(*.java)의 클래스에 생성자가 하나도 정의되지 않은 경우,컴파일러는 자동적으로 아래와 같이 기본 생성자를 추가하여 컴파일 한다.

클래스 이름() { }
생성자() { } //자동으로 기본 생성자 추가

생성자는 초기에 주입할 필요한 값을 전달하거나 초기에 작업을 수행 할 때 사용하며, 만드는 방법은 클래스명과 동일한 메소드에 인스턴스에서 전달한 Argument(인수,인자)를 받을 수 있는 Parameter(매개변수)를 정의하면 된다.

Class 생성자 {
	int a ;
	public 생성자(int a) {
		this.a = a;
		...
	}

    생성자 foo = new 생성자(1) { //생성할 때 1을 보내서 a에 1이 들어감
        ...
    }
}

this

this는 클래스를 통해서 만들어진 인스턴스 자신을 가리킨다. "해당 객체의" 라는 뜻. Class가 인스턴스화 했을 때 그 인스턴스를 가르키는 특수한 문자.
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();       
c1.avg();

c1은 Calculator 라는 클래스와 new가 만나 인스턴스가 되었고, 객체 되었다. c1은 setOprands 메소드를 호출해서 10과 20의 값을 던져준다. setOprands 안에는 변수 left, right가 있는데 이 변수들은 setOprands밖에 접근하지 못하기 때문. setOprands 내부에 있는 left와 right는 this 를 통해 밖에서 전달받은 값을 할당받을 수 있다. "해당 객체의" 멤버변수임을 표시해주는 것. 얘 우리 애야!

이러면 밖에서 뭘 넣어주느냐에 따라 left, right 값이 가지고 있는 것이 달라질 수 있다. 인스턴스의 멤버들이기 때문이다. 하나의 클래스를 여러개의 인스턴스로 만들어서 사용할 수 있다.

static

static을 맴버(변수,메소드) 앞에 붙이면 클래스의 맴버가 된다.
static double PI = 3.14;

π는 3.14로 다들 알고 있는 값이다. 이걸 일일히 인스턴스들이 가지고 있기에는 비효율적이다. 이 경우엔 변수를 클래스의 멤버로 만들면 모두가 공통으로 사용할 수 있다. 클래스의 멤버이기 때문에 가져다 쓸 때마다 인스턴스를 생성할 필요가 없다.(하나의 클래스에서 여러개의 인스턴스로 값 할당하는게 아니라 그냥 꺼내쓰는 클래스 내부에 있기 때문에) 따라서 클래스 변수는 변수의 변경사항이 있으면 빌려간 모든 인스턴스에도 값이 변경된다.

출처 : 생활코딩 Java

반응형
LIST
반응형
SMALL

1. 왜 JAVA 8을 사용하나?

1) Oracle 지원기간이 길다.

Oracle JDK 지원 기간이 다음과 같다.

Java 8 : 2030년 12월
Java 11 : 2026년 9월
Java 17 : 2029년 9월

옛날에 나온 Java 8이 그 이후 나온 11과 17보다 길다.

2) 자바는 객체지향형 프로그램이지만 JDK1.8부터 함수형 프로그래밍도 지원한다.

객체지향형 프로그래밍은 프로그램을 명령어의 목록으로 보는 것이 아니라 여러개의 독립된 단위(=객체)로 보기 시작하여 묶고, 재사용하고, 이리저리 만져서 조립하는 방법이라고 표현할 수 있다.

절차지향형 프로그래밍은 말 그대로 순서대로 진행하는 것이다.

함수형 프로그래밍은 순수한 함수를 사용해서 상태를 제어한다기 보다는 빨리 처리하는데 초점을 맞춘다. 실행 순서를 지정할 필요가 없기 때문에 비절차형 언어라고도 부른다. 외부에 영향을 받지 않아 동일한 입력값을 넣으면 항상 동일한 리턴값을 반환하는 함수 기능을 수행한다. 때문에 함수의 실행이 프로그램에 영향을 주지 않는다. 쉽게 말해 객체지향 프로그래밍은 객체들의 관계를 중심으로 긴밀한 관계성이 있어 상태에 따라 결과가 달라질 수 있지만, 함수형 프로그래밍은 그 자체로 처리만 해주기 때문에 각각의 동작들이 분리되어 있어 프로그램이 얼마나 오래 실행되고 있었는지 상관없이 같은 결과값을 도출해준다.(참조 투명성 – 값을 다시 할당하지 않는 것)

JDK 1.8은 2014년도에 출시되었고 다음과 같은 기능과 특징들이 있다.

람다식(Lambda expressions) - Stream
함수형 인터페이스 (Functional Interface)
디폴트 메서드 ( Default Method)
JVM의 변화
병렬 배열 정렬(Parallel Array Sorting)
컬렉션을 위한 대용량 데이터 처리 ( 스트림 )
Optional
Base64 인코딩과 디코딩을 위한 표준 API
새로운 날짜, 시간 API (Date & Time API

Java 8 을 기점으로 시대의 흐름에 맞게 병렬 프로세싱을 활용하고자 했고, 그로 인해 기존 버전에서는 구현하기 힘들었던 부분을 함수형 프로그래밍과 비동기 논블로킹 방식을 도입하여 해결했다. 

Java11은 기능추가가 된 것들이 많다. 그럼에도 불구하고 java8을 사용하는 이유는

1) 외부 개발 툴과의 연동성에서 가장 안정적이다. java11부터 요금정책이 바뀌어서 Oracle JDK 말고 Open JDK를 사용해야함.
2) Java11과 크게 차이가 나지 않는다. 따라서 java8 릴리즈 지원 안하면 그때 버전 업그레이드를 해도 됨.

2. JAVA 버전에 맞는 JDK 이름은?

원래는 Java SE 1.1, Java SE 1.2 같은 이름이다가 java 5부터 숫자로 붙여진다.
java SE 8 까지는 JDK 버전을 찍으면 JDK 1.8.x.x로 찍히는데 9버전부터는 그냥 JDK 9.x.x로 나온다.
따라서 Java 8 까지는 JDK1.8이라고 쓰지만, 9 이상은 JDK 9 로 쓴다.

자바 버전

java8 까지는 JRE와 JDK를 따로 다운로드 할 수 있도록 제공했다.

하지만 java9부터는 이런구분이 사라지고 항상 JDK를 다운로드하도록 변경되었다.

JDK의 디렉토리 구조도 변경되어 더이상 명시적인 JRE 폴더가 없다.

 

JRE(Java Runtime Environment) : JAVA 로만 개발할 때 사용되는 도구들 포함(JVM + java command-line tool)

JDK(Jaba Development Kit) : JRE + 컴파일러 + javadoc + javac 등등 기타 도구

 

반응형
LIST
반응형
SMALL

+ Recent posts

반응형
LIST