본문 바로가기
개발공부하며 느낀 인생 공부

내가 보려고 정리하는 자바 개념들[헬로월드]

by 날파리1 2022. 7. 3.

GUI (Graphic User Interface) / CLI(Command Line Interface)

그래픽 사용자 인터페이스(graphical user interface, GUI)는 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 것이다. 컴퓨터를 사용하면서, 화면 위의 물체나 틀, 색상과 같은 그래픽 요소들을 어떠한 기능과 용도를 나타내기 위해 고안된 사용자를 위한 컴퓨터 인터페이스이다.

- 그래픽 즉 뭐 단추나 텍스트 창 등으로 이루어진 인터페이스 라는 뜻

 

명령 줄 인터페이스(영어: Command-line interface, CLI, 커맨드 라인 인터페이스) 또는 명령어 인터페이스 가상 터미널 또는 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻한다. 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며, 컴퓨터로부터의 출력 역시 문자열의 형태로 주어진다.

터미널처럼 명령어를 넣으면 문자열을 반환하는 인터페이스 라는 뜻 

 

라이브러리(Library)

Java에서는 우리가 원하는 모든것은 객체 즉,class단위로 작성하여 프로그램을 작성한다. 우리가 작성하는 class외에 Java에서는 미리 자주사용되고 유용한 기능을 하는 class들을 만들어 놓고 제공을한다. 이떄 이 클래스들을 관련된 기능별로 분류하여 패키지단위로 묶어서 관리하는데 이 패키지 파일을 라이브러리라고 한다. API는 이러한 클래스들의 코드를 문서로 제공하는 것이다.

 

API(Application Programming Interface, 응용 프로그래밍 인터페이스)

API는 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

 

API는 원래 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다. 이러한 연결이나 인터페이스를 빌드하거나 사용하는 방법을 기술하는 문서나 표준은 API 사양으로 부른다. 

컴퓨터와 인간을 연결시키는 사용자 인터페이스와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다. 직접 사람(최종 사용자)에 의해 사용되도록 고안된 것이 아니며, 대신 소프트웨어에 이를 통합하고자 하는 컴퓨터 프로그래머가 사용하도록 고안되었다. API는 각기 다른 부분으로 구성되기도 하며 프로그래머가 사용할 수 있는 도구나 서비스의 역할을 한다. 

 -> 예를 들면 자바에서는 System.out.println 과 같이 우리가 배운적 없는 형태이지만 이미 기존에 만들어놓은 내장 API임으로 받아서 쓸 수 있는 것.

 

타입

타입(data type)은 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 합니다.

자바 스크립트의 변수 타입에는 크게 Primitive type(원시타입)과 Reference Type(참조타입)으로 나누어져 있다. 원시타입(Primitive type)의 변수들은 데이터 복사가 일어날 때 메모리 공간을 새로 확보하여 독립적인 값을 저장하며 참조 타입은 메모리에 직접 접근이 아닌 메모리의 위치(주소)에 대한 간접적인 참조를 통해 메모리에 접근하는 데이터 타입이다.

원시타입 8개 (정수형, 실수형, 문자형, 논리형)

정수형

1. byte

2. short

3. int

4. long

 

실수형

1. float

2. double

 

문자형 (String 아님에 주의!)

1. char

 

논리형

1. boolean

 

원시타입은 변수에 할당될 때, 메모리의 고정 크기로 원시 값을 저장하고 해당 저장된 값을 변수가 직접적으로 가리키는 형태를 띈다. 또한 값이 절때 변하지않는 불변성을 갖고있기때문에 때문에 재할당 시 기존 값이 변하는것 처럼 보일지 몰라도 사실 새로운 메모리에 재할당한 값이 저장되고 변수가 가리키는 메모리가 달라졌을 뿐이다.

https://velog.io/@nomadhash/Java-Script-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%AC%EC%99%80-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%AC

자세한 예시와 설명 위 블로그 참조

 

원시타입을 제외한 나머지는 참조 타입(객체(Object))이다 

자바스크립트에서 원시 타입을 제외한 나머지는 참조타입(객체(Object))이라 할 수 있다. 배열과 객체, 그리고 함수가 대표적이며, 원시타입과 가장 큰 차이점은 변수의 크기가 동적으로 변한다는 것이다. 이러한 특징 때문에 Object의 데이터 자체는 별도의 메모리 공간(heap)에 저장되며, 변수에 할당 시 데이터에 대한 주소 ( 힙(Heap) 메모리의 주소값)가 저장되기 때문에 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근하게 되는것이다. 

- 참조 타입은 고정크기로 된 원시 값을 저장하고 직접 주소를 가르키는 원시타입과 달리 힙이라는 곳에 별도로 만들어 그 주소를 가르키기때문에 말 그대로 참조를 하는 타입이다. 그렇기에 변수의 복사나 수정 시 참조 여부를 잘 고려해야 한다. 만일 이러한 특성을 고려하지 않은 채 중요한 정보를 담고있는 객체나 배열에 수정 및 복사를 가하게되면 원본 데이터가 예상치 못한 방향 으로 변경될 수 있으므로 항상 이를 고려해야한다.

 

객체

객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 됩니다.

객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있습니다.

이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍입니다.

이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 합니다.

 

접근제어자(access modifier)

객체 지향에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념이다.

그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있다.

자바에서는 이러한 정보 은닉을 위해 4가지의 접근 제어자(access modifier) 기능을 제공있다.

1. private

2. public

3. default

4. protected

private 접근 제어자

private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없다.

즉, 자바 프로그램은 private 멤버에 직접 접근할 수 없으며, 해당 객체의 public 메소드를 통해서만 접근할 수 있다.

따라서 private 멤버는 public 인터페이스를 직접 구성하지 않고, 클래스 내부의 세부적인 동작을 구현하는 데 사용된다.

public 접근 제어자

public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있다.

자바 프로그램은 public 메소드를 통해서만 해당 객체의 private 멤버에 접근할 수 있다.

default 접근 제어

자바에서는 클래스 및 클래스 멤버의 접근 제어의 기본값으로 default 접근 제어를 별도로 명시하고 있다.

이러한 default를 위한 접근 제어자는 따로 존재하지 않으며, 접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 가지게 된다.

default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있다.

protected 접근 제어자

자바 클래스는 private 멤버로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축한다.

여기에 부모 클래스(parent class)와 관련된 접근 제어자가 하나 더 존재한다.

protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급된다.

클래스의 protected 멤버에 접근할 수 있는 영역은 다음과 같다.

1. 이 멤버를 선언한 클래스의 멤버

2. 이 멤버를 선언한 클래스가 속한 패키지의 멤버

3. 이 멤버를 선언한 클래스를 상속받은 자식 클래스(child class)의 멤버

 

메소드(method)

자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가진다.

그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합.

메소드의 사용 목적

클래스에서 메소드를 작성하여 사용하는 이유는 중복되는 코드의 반복적인 프로그래밍을 피할 수 있기 때문

또한, 모듈화로 인해 코드의 가독성도 좋아진다.

그리고 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때도 손쉽게 유지보수를 할 수 있게 된다.

 

static

정적(Static)이란?

정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이 둘을 합쳐 정적 멤버라고 합니다. (클래스 멤버라고도 합니다.) 정적 필드와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버입니다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리됩니다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다.

Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당됩니다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 됩니다. 그렇기에 Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있습니다.

 

람다식이란?

람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어입니다.

현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람다 대수이다. 람다 대수는 간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법입니.

 

람다의 특징

람다 대수는 이름을 가질 필요가 없다. - 익명 함수 (Anonymous functions)
두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 될 수 있다. - 커링 (Curring)

익명함수?

익명함수란 말그대로 함수의 이름이 없는 함수입니다. 명함수들은 공통으로 일급객체(First Class citizen)라는 특징을 가지고 있습니다.

이 일급 객체란 일반적으로 다를 객체들에 적용 가능한 연산을 모두 지원하는 개체를 가르킵니다. 함수를 값으로 사용 할 수도 있으며 파라메터로 전달 및 변수에 대입 하기와 같은 연산들이 가능합니다.

람다의 장단점

장점

1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있습니다.

2. 지연연산 수행 - 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화 할 수 있습니다.

3. 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용 할 수 있습니다.

단점

1. 람다식의 호출이 까다롭습니다

2. 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어집니다.

3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있습니다.

람다의 표현식

1. 람다는 매개변수 화살표(->) 함수몸체로 이용하여 사용 할 수 있습니다.
2. 함수몸체가 단일 실행문이면 괄호{}를 생략 할 수 있습니다. 
3. 함수몸체가 return문으로만 구성되어 있는 경우 괄호{}를 생략 할 수 없습니다.

변수(variable)

변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미합니다.

즉, 변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있습니다.

 

객체의 생명 주기

객체의 생명주기란?

객체의 생존 기간을 이르는 말, 라이프 사이클, 객체가 생성된 후 부터 폐기될 때 까지의 기간.

 

지역변수

-처리 블록 내에서만 사용할 수 있는 변수

-변수를 선언한 곳에서 생성되어 블록이 종료한 시점에서 폐기

 

인스턴스 변수

-클래스의 필드로 선언하는 변수

-부조 객체를 생성할 때 생성되어 부모 객체가 가비지 컬렌션될 때 함께 삭제된다.

 

[ Garbage Collection(가비지 컬렉션)이란? ]

프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 한다. 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문이다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다. 

 

클래스 변수

- 클래스의 static 필드로 선언한 변수

-자바의 변수 중 가장 긴 라이프 사이클을 가짐.

-클래스 로드시에 생성되며 클래스가 언로드 될때 소멸

 

반환과 반환 타입

따라서 함수 안쪽에서 변환시킨 값을 함수 바깥으로 넘겨주는 방법이 필요합니다.

return 은 수 바깥으로 값을 보내준다는 뜻으로 "값을 반환한다."  또는 "리턴한다"라고 합니다.

본래 함수 이름 바로 앞에는 반환하는 값의 데이터형을 적는것이 문법의 규칙입니다. -> 반환 타입

 

관심사의 분리

코드가 중복되는 것을 찾아서 -> 리팩토링 -> 코드의 분리

따라서 추후에 내가 원하는 방향으로 코드를 바꾸거나 가독성을 높이기 쉬움

댓글