본문 바로가기
Web developer/[Java]

[Java][Introduction] 자바 용어

by 보끔밥0130 2023. 2. 11.
728x90

소개

Hard Ware ⊃ 운영체제(Window, 리눅스, osx) ⊃ 자바 ⊃ source code

 

Java SE : 자바의 표준안

JDK : 구체적인 소프트 웨어 (개발자)

JRE : 자바가 실제로 동작하는 데 필요한 JVM, 라이브러리, 각종 파일들이 포함 (일반 사용자)

JVM : 자바가 실제로 구동하는 환경

 

JDK ⊃ JRE ⊃ JVM

 

install

Google > Java JDK download > cmd > Java > Javac

 

c > progrmas files > java > jdk-19 > bin 의 경로를 복사하여 PATH로 가서 환경 작업 해주기

 

① 시스템 환경 변수 편집 > 환경변수 > 시스템 변수 > Path변수 > 복사한 경로 붙여넣기

② ComSpec > 새 시스템 변수 > JAVA_HOME이름 > bin 제외한 경로 붙여넣기

 

실행하기

코드 > 컴파일(변환)  javac > 실행 java

 

 code →(compiler) Byte code →(java) JVM

 

① WIN + R > cmd

② cd "파일 경로"

③ dir

④ javac HelloWorld.java

⑤ java HelloWorld

 

개발 툴 : eclipse

 

주석 :

● 한 줄  - //

여러 줄 - /*   */

Javadoc - /**    */

 

세미 콜론(;)은 문장의 끝남을 의미합니다.

 

객체 지향

서로 연관 데이터와 연산을 그룹핑 할 수 있는 기능을 제공합니다.

 

필요에 따라서 함수를 선택적으로 사용할 수 있는 수단입니다.

 

객체는 하나의 독립된 프로그램으로 바라봅니다.  그 프로그램 안에 변수, 메소드가 있습니다.

 

클래스 멤버와 인스턴스 멤버

클래스 는 설계도에 비유하고 인스턴스는 제품에 비유하며 멤버는 그 구성원이라 생각합니다.

 

객체는 변수, 메소드의 집합입니다.

 

클래스 내 객체는 인스턴스이며 인스턴스 또한 변수, 메소드의 집합입니다.

 

하나의 클래스를 여러 개의 인스턴스로 만들어서 사용할 수 있습니다.

 

클래스 멤버의 변수(static)는 인스턴스에 따라서 변하지 않는 값을 가집니다.

 

인스턴스 멤버의 변수는  인스턴스 마다 다른 값을 가질 수 있습니다.

 

Class - 변수, 메소드

Instance - 변수, 메소드

 

1. 인스턴스 메소드는 클래스 멤버에 접근할 수 있습니다.

 

2. 클래스 메소드는 인스턴스 멤버에 접근할 수 없습니다.

 

클래스 변수 static field (클래스 내의 변수) → static (전역변수)

인스턴스 변수 Non-static field

 

유효범위 

static scope 정적인 유효 범위 

 

메소드의 동작 범위가 자기 자신이거나 전역 변수 값에 접근할 수 있는 경우

 

dynamic scope 동적인 유효범위

 

메소드의 동작 범위가 지역 변수 값이 나오는 경우

 

유효범위란 변수를 전역변수, 지역변수로 나누어 관리하기 편리하도록 한 것

 

this를 붙이면 인스턴스 자신을 의미합니다. 그 객체에 대한 전역을 의미합니다.

즉, 변수의 이름이 같을 때 전역 변수와 지역변수를 구분하기 위한 this를 붙이면 전역변수입니다.

 

● 생성자 construtor

인스턴스가 생성 될 때 기본 값을 입력하도록 강제

 

① 값을 반환하지 않습니다.

 

② 생성자의 이름은 클래스의 이름과 동일합니다. 

 

● 상속

 

어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능입니다.

 

하위 클래스에서 상위 클래스의 코드를 참조할 때 super()

 

항상 super()가 하위 클래스의 기능보다 우선합니다.

 

● overriding (올라탄다)

하위 클래스가 부모 클래스의 기본적인 동작 방법을 변경할 수 있는 기능입니다.

 

상속 관계에 있는 클래스 간에 같은 이름의 메서드를 재정의하는 것을 말합니다.

① 부모와 자신의 리턴 데이터 타입이 일치 해야합니다.

② 부모와 자식의 메소드의 이름이 일치 해야합니다.

③ 부모와 자식의 매개변수의 숫자와 데이터 타입 그리고 순서가 일치 해야합니다.

 

overloading ()

클래스에 메소드를 정의할 때 메소드가 같은 이름이지만 서로 다른 매개변수의 형식을 가지고 있는 메소드를 여러 개 정의합니다.

 

두 메서드가 같은 이름을 갖고 있으나 인자의 수나 자료형이 다른 경우입니다.

riding을 이용해서 부모 클래스의 메소드 동작 방법을 변경합니다.

 

loading을 이용해서 같은 이름, 다른 매개변수의 메소드들을 여러 개 만들 수 있습니다.

 

● 클래스와 경로 - 클래스 패스

java -classpath ".:lib"classpathDemo

환경 변수 설정

이름 : CLASSPATH, 값 : "클래스 전체 경로(lib경로)"

 

src : 소스코드

bin : 컴파일 된 클래스 파일

javac 경로/.java -d bin

컴파일 된 결과를 bin 디렉터리에 생성

 

< 규제 >

● 멤버의 접근 제어자

 

클래스의 멤버(변수와 메소드) 들의 접근 권한을 지정

 

public / private

 

접근 같은 클래스 같은 패키지 다른 패키지 서브 클래스 (상속 관계)
단, 인스턴스화 (new) 는 불가
관계 없음
(다른 패키지이면서 상속관계 아님)
public O O O O
protected O O O X
default O O X X
private O X X X

 

  클래스의 접근 제어자 (Access modifier)

 

public 클래스가 포함된 소스코드는 public 클래스의 클래스 명과 소스코드의 파일명이 같아야 합니다.

그 말은 하나의 소스 코드에는 하나의 public 클래스가 존재할 수 있다는 의미입니다.

 

  abstract 상속을 강제하기 위함

추상화란 구체적인 로직을 담지 않고 그 로직을 사용하기 위한 형식 (signiture)만을 가지고 있는 기능으로 구현의 책임은 사용자에게 있습니다.

 

추상 클래스는 반드시 상속 받아 사용하도록 강제합니다.

 

즉, 부모 클래스에 메소드는 시그니처만 정의하고 그 메소드의 실제 동작 방법은 이 메소드를 상속받은 하위 클래스의 책임으로 위임합니다.

 

추상 클래스 내에는 추상 메소드가 아닌 메소드가 존재할 수 있습니다. 단, 멤버 중 하나라도 추상 메소드가 존재하면 추상 클래스가 됩니다.

 

 

abstract calss A { 로직 }

 

추상 메소드

public abstract int b();

//사용시
class B extends A {
public int b(){
로직
}}

오버라이딩해서 메소드에 대한 구체적인 논리를 사용할 때 정의해서 사용해야 합니다.

 

  final

상속/변경을 금지합니다.

 

  interface 

개발 협업 개념에서 등장합니다.

 

클래스 뒤의 implements는 이 클래스가 인터페이스를 구현하고 있다는 의미입니다.

 

상속 VS 인터페이스

상속은 상위 클래스의 기능을 하위 클래스가 물려받는 기능이면 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제합니다.

 

클래스를 선언할 때는 class, 인터페이스는 interface 

 

구현할 때 상속은 extends, 인터페이스는 implements

 

interface 개념의 등장으로 interface에 규약된 것처럼 정의되어 있는 각각의 메소드를 구현합니다.

 

단 정의되지 않은 메소드의 형식이였으면 컴파일이 되지 않습니다.

 

그래서 약속이 유지될 가능성이 높아집니다.

 

결론적으로 interface는 어떠한 클래스가 어떠한 메소들을 가지고 있는가 어떠한 멤버를 가지고 있는가에 대한 명세서와 같은 역할을 합니다.

 

규칙)

하나의 클래스는 복수의 인터페이스를 구현 할 수 있습니다.

 

인터 페이스도 상속이 됩니다. (부모의 기능을 자식들이 가져갑니다)

 

추상화 vs 인터페이스

추상화는 동시에 실제 구체적인 로직을 갖고 있는 메소드나 필드가 존재

 

인터페이스는 구체적인 로직을 갖는 메소드를 포함시키면 안됩니다. 반드시 본체가 없는 메소들만을 가지고 있습니다.

 

● 다형성

 

하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미합니다.

 

ex) 키보드의 키 '누른다' 하지만 ESC는 취소 Enter는 실행 등 동일한 조작 방법으로 동작하지만 동작 방법은 다릅니다.

 

A obj = new B()

클래스 B를 인스턴스화 하는 obj는 클래스 A를 데이터 타입으로 합니다.

 

클래스 A안에 존재하는 메소드가 실행됩니다.

 

★ 다른 클래스 행세 하지만 상위 클래스를 오버라이딩한 경우라면 인스턴스화 시킨 클래스의 메소드를 실행시킵니다.

 

ex) 클래스와 다형성, 인터페이스와 다형성

 

<예외> Exception

오류를 대응하기 위한 방법

●  try & catch 

try { 로직}
catch (Exception e){ 로직}
finally {로직}

에러 명령어

e.getMesage()

e.toString()

e.printStackTrace()

 

● throws 예외명

책임의 전가

예외를 사용자에게 떠넘김

 

● checked / unchecked

Throw able ⊃  error, Exception

 

Exception ⊃ IOException, RuntimeException

 

RuntimeException ⊃ Arithmetic Exception

 

부모에 RuntimeException이 있으면 unchecked( 해도 되고 안 해도 되는 예외) 없으면 checked (반드시 예외처리)

 

<특별한 클래스>

object

class o {}
// 동일한 코드
class o extends object{}

object의 상속이 생략됩니다.

object 클래스

toString(), equals()

 

//obj을 새롭게 할당할 경우 데이터 타입 명시
Object obj = s2
student s = (student) obj

clone

복제

어떤 객체가 있을 때 그 객체와 똑같은 객체를 복제해주는 기능입니다.

 

클래스가 복제 가능하다는 것을 표시하기 위해 Clonable(implements Clonable)을 구현해야합니다.

 protected Object clone() throws CloneNotSupportedException{
        return super.clone();
    }

 

복제하려는 객체에 clone이라는 메소드를 상속받아서 구현해 놓습니다.

 

● 상수와 enum

서로 연관된 상수의 집합( 인스턴스의 생성과 상속을 방지합니다)

구현의 의도가 열거입니다.

enumerated type 열거형을 의미합니다.

 

  참조

기본 데이터 타입 (원시 데이터)과 다르게 new로 생성한 자료

 

 

// 값 복제
int a = 1;
int b = a;
b = 2

//참조
A a = new A(1);
A b = a;
b.id = 2

복제는 a → 1, b → 1 에서 a → 1, b → 2

a b
1 1

 

참조는 a → new A(), b → new A() 에서 a → 2, b → 2

a b
new A()

● 제네릭 Generic

클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미합니다.

 

class Human <T>{
     public T info;
}

// 외부 (사용시 데이터 타입 지정)
Human<String>H1 = new Human <String>();

적용 순서

new Human <String> → <T> → T info 가 String → H1도 Human <String>

 

왜 쓰는가?

공통적인 클래스의 존재로 인한 중복을 줄이면서 타입을 안전하게 만듭니다.

 

제너릭 <T> 에는 참조 데이터 만을 사용합니다.

* wrapper 

기본 데이터 타입을 객체로 포장하는 객체 ex) int는 integer  → intValue()로 돌려 받음, double은 Double

 

제너릭의 생략이 가능합니다.

메소드에서 사용 가능합니다.

 

제너릭의 제한은 extends를 사용합니다 (부모 표시ㅒ

 

● collections Framework

 배열은 연관된 데이터를 관리하기 위한 수단입니다.

 

단, 배열은 선언할 때 그 배열의 크기를 지정하며 더 많은 값을 담지 못합니다. 

import java.util.ArrayList()
ArrayList a = new ArrayList();

컬렉션 프레임 워크

① Collection - set, list, queue

② Map (key,value)

 

List는 중복을 허용, 순서기반

set은 중복을 허용하지 않음, 순서 없음

 

java 컬렉션 프레임 워크

https://prashantgaurav1.files.wordpress.com/2013/12/java-util-collection.gif

 

 

728x90

댓글