JAVA base
클래스, 상속, 추상화 등의 개념 정리
JAVA
jdk, jre, jvm
- jdk = 자바 개발도구(Java Development Kit)
- jre = 자바 실행환경(Java Runtime Environment)
- jvm = 자바 가상머신(Java Virtual Machine)
버전 명칭
- version 1.8 = 8 버전
- version 1.9 = 9 버전
dynamic typed 인터프리터
컴파일
- 컴파일 = compile = 코드를 기계어(이진수 코드. 0과 1로) 바꾸는 것
- 컴파일. javac
- .java 파일을 javac가 컴파일하면 .class파일로 변환된다.
- .class파일이 JVM의 클래스로더에게 전달되고 JVM은 메모리에 올린다.
- 프로세스가 실행된다.
프로그램 vs 프로세스
- 프로그램이 실행되면 프로세스
- 실행됬다는 것은 메모리에 올라갔다는 의미
변수
- 반복해서 사용할 때 코딩의 반복을 막기 위함
- 값의 이름을 정의하기 위함
- 자바에서 변수 선언하는 법
데이터타입 변수명 = 값;
- 예)
int a= 5;
데이터 타입
- primitive(기본형)
- call by value
- 8가지 기본형
- boolean
- char
- byte, int, short, long
- float, double
- object(객체. 참조형)
- call by reference
- a의 주소값은 그대로고 값이 바뀌는 것이 아니라 주소가 변경된다. 원시형 데이터 타입이 아니기 때문.
1 | string a = “안녕하세요”; |
함수
특정 프로세스를 반복하여 사용할 때 유지보수를 간편하게 한다
이 프로세스가 무엇을 하는지 명확하게 이름을 지어 코드작성과 읽기를 편하게 하기 위함
자바에서 함수 정의하는 법
- 접근제한자 리턴타입 함수명(데이터타입 이름){본문};
- 예)
public int sum(int a, int b){ returmn a+b; }
함수 호출하는 법
함수명(매개변수);
디버거
- 사용 목적 : 코드를 컴퓨터가 실행하는 과정으로 각 단계별로 추적하여 버그를 고치는 것을 간편하게 한다
- 자바스크립트에서 쓰는 법:
- 멈출 코드의 라인에
debugger;
를 작성하고 코드 화면 우클릭하여 디버거 모드로 실행(개발자 모드)
- 멈출 코드의 라인에
- 자바에서 사용하는 법
- 멈출 코드의 라인에 브레이크 포인트를 걸고 디버거 모드로 실행(debug as)
node.js
- 자바스크립트를 브라우저 외에 환경에서 실행하게 해주는 런타임 환경
부가 설정
- 일단 이클립스(STS)는 JDK를 통해서 컴파일 하지 않는다.
- 기본적으로 내장된 컴파일러를 사용한다
- 성정을 변경하려면 다음과정을 거친다
- STS → window → preference → compiler 검색 → 버전 변경 : 11
- STS → window → preference → installed 검색 → jre 11d에 체크
while문
- 언제 while을 사용하고 언제 for를 사용하는가?
- 조건이 ‘상환, 컨디션’으로 정해지면 while이 편하고, 조건이 ‘횟수’로 정해지면 for가 편하다.
- 하지만 for와 while은 서로 변환할 수 있다.
새로 배우기
- 좋은 설계 = 높은 응집도 and 낮은 결합도
은닉화, 캡슐화
- 어떻게 동작하는지 원리를 몰라도 사용법만 알면 사용할 수 있다.
- 전화번호는 국제적으로 어떻게 한 사람이 하나의 번호를 부여받고 통신하는 어떻게 그것을 관리하고
- 4g,5g는 무엇이고 우리가 전화번호로 통화 버튼을 누르면 어떤 정보가 어디로 가서 어덯게 처리되어 통화 작업이 일어나는지
- 음성은 어떻게 데이터화되서 전달되는지
클래스
- class는 객체에 대한 설계도
- 설계도 대로 인스턴스를 하나 만들면 그제서야 메모리에 올라간다.
오버로드
- Overload : 오버로드. 이것도 싣도 저것도 싣고.
- 함수의 이름이 같은데 파라미터가 다를 경우 서로 다른 함수같이 작동되는 매커니즘.
- 호출할때의 데이터타입과 객수를 보고 그렇게 정의했던 함수가 호출된다.
프로그래밍 패러다임
- 객체지향 프로그래밍 (OOP = Objected Oriented Promgramming)
- 절차지향적 → 객체지향적으로 발전에 의해 변경됨
- 장점 : 사람이 세상을 보는 것과 같은 방식
- 단점: 간단한 것 하나를 만들려고해도 설계부터 해야한다.
일급 객체
일급객체(First-class Object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.
- 변수에 할당할 수 있다.
- 다른 함수를 인자로 전달 받는다.
- 다른 함수의 결과로써 리턴될 수 있다.
- JAVA의 함수 = 일급 객체
콜백함수
- 비동기적 프로그래밍을 하기 위해서 콜백함수를 사용.
- 비동기적 == 비절차적
- 동기적이지 않다. 즉, a가 시작된 후에 a가 끝나지 않더라도 b가 시작될수 있는 것
- 동기적 == 절차적
- a 가 끝나야 b가 시작되는 서로다른 두 객체간의 시간적 값의 일치
- 왜 비동기적 프로그래밍을 하나요?
- 동기적 프로그래밍의 단점 :
- 에러가 나면 정지된다. 하나만 틀려도 전체가 틀어진다.
- 동기적 프로그래밍의 장점:
- 병렬적으로 일을 처리할 수 있기 때문에 속도를 높일 수 있다.
- 반드시 나 이전의 일이 끝나기를 기다릴 필요가없을 때 병렬적으로 일츨 처리하면 속도를 높일 수 있기 때문
1 | // 콜백 방식 |
생성자 Constructor객체
- 역할 : 객체를 인스턴스화(생성) 하는 역할
- 문법 : 함수와 비슷하게 생겼는데 이름이 클래스명이고 리턴값이 없다
객체를 생성할 때 new 키워드와 함께 사용. 생성할때 필요한 데이터를 강제하는 역할
클래스에는 반드시 최소하나이상의 생성자가 존재
클래스에 생성자가 명시적으로 없더라도 컴파일러가 디폴트 생성자를 넣어주기 때문에 new키워드와 함께 생성자를 호출가능
디폴트 생성자는 매개변수와 구현부가 없다
1 | public class Potion { |
- 생성자 생성
- Ctrl + Space바 + Enter
생성자가 무엇인지 설명하고 왜 사용하는 설명하라.
⇒ 객체를 생성할 때 쓴다.
객체가 생성될 때 필요한 데이터를 강제하는 역할을 한다.
⇒ 필요한 데이터가 준비되었다면 쉽게 객체를 만들 수 있도록 한다.
⇒ 데이터가 아직 준비되지 않았다면 객체를 생성할 수 없도록 한다.
추상화, 상속
객체 : 소프트웨어로 구현할 대상. 개념
인스턴스 : 클래스(설계도)로 구현된 구체적인 실체
추상클래스 : 자식 extends 부모. 자식은 하나의 부모’만’ 가질수있다.
동물 > 척추동물 > 포유강 > 식육목 > 고양잇과 > 표범과 > 표범
클래스가 미완성이라는 것은 추상메소드가(abstract가 붙은 메소드) 하나 이상 포함된 클래스라는 말
추상클래스로 인스턴스 생성은 불가능. 상속을 통해서 자식클래스에 의해서만 인스턴스를 생성할 수 있다. 부모가 만들어놓은것을 이어받아 자식이 완성시켜야 한다
Quiz!
- 우리 아빠의 그랜저 = 인스턴스
- 그랜저라는 개념 = 객체
- 현대자동차의 그랜저 설계도 = 클래스
- 중국으로 일부 유출된 그랜저 설계도 = 추상클래스
Override
= 부모에 있는 메소드의 형태와 같은 메소드를 자식에 선언했을 때 자식의 메소드가 부모의 메소드를 덮어쓰는 매커니즘
오버로드 , 오버라이드 **차이점
오버로드 = 과적재 = 이거 싣었다가 저거 싣었다가
= 함수의 이름이 같고 파라미터가 다른 여러함수를 정의해놨을 때 함수호출시의 파라미터에 맞춰서 그에 맞는 함수가 호출되는 것.
오버라이드 = 오버라이트 = 덮어쓰기
- 상속이라는 개념을 먼저 알아야 한다. 부모클래스와 extends
추상클래스
- abstract 키워드가 붙은 메소드가 하나라도 있는 클래스
- 사실은 구현되다가 만놈(완벽하게 개발을 끝내지 못함)인데 내가 만든 클래스를 다른 사람이 상속받게 되면 미완성인 것을 사용하게 된다.
- 추상클래스로는 인스턴스를 만들 수 없다. 왜냐? 미완성된 놈이니까.
- 자식에서 반드시 추상 메소드를 오버라이드 해줘야 한다.
install_url
to use ShareThis. Please set it in _config.yml
.