일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- CI/CD
- 그리드
- 다이나믹프로그래밍
- 분할 정복
- 자바
- 재귀
- 순열
- 이분탐색
- 알고리즘
- HTTP
- 다이나믹 프로그래밍
- 분할정복
- GIT
- Spring
- 브루트포스
- github action
- dfs
- 자료구조
- 그리드 알고리즘
- 백준
- 도커
- 역방향 반복자
- BFS
- SQL
- 그래프
- 스프링
- TCP
- AWS
- 트리
- 컴퓨터 네트워크
- Today
- Total
코딩성장스토리
자바의 역사와 이 본문
자바의 기본적 이해
자바를 이해하기 위해일단 언어의 유래를 살펴보자
어셈블리어: 기계어와 1대1 대응, 기종별로 어셈블러 필요(이식 x) (운영체제나 컴퓨터가 다르면 사용못함)
c언어: 기계어와 m:n 대응 , 기종별로 컴파일러 필요(이식성 좋아짐) 즉 컴파일을 기종마다 다르게 하고 줘야함
자바: 기계어와 m:n 대응 , 단 하나의 컴파일러 필요 (기종별로 JRE 세팅 필요(한번)) 컴파일한걸 기종한테 그냥 주면 끝
JDK: 자바 개발 도구
JRE: 자바 실행 환경JVM : 자바 가상 기계
메모리 사용방식
프로그램이 메모리 사용하는 방식은 크게 코드실행영역(opcode) 와 데이터 저장 영약(메모리) 가 있다.
그리고 메모리 영역에는 또 세가지가 있는데 스태틱,스택,힙 영역이 있다.
자바가 실행하게 되면
1.스태틱에 import한 코드들과 모든 클래스, 클래스 멤버변수가 들어간다.(실행이 끝날 떄 까지 존재)(클래스의 놀이터)
2.스택영역에 메서드가 실행되면 메서드 프레임이 생기고 메서드 안해서 생기는 변수(지역변수)가 담긴다.(메서드의 놀이터)
(스택은 중괄호가 열리고 닫는 거에 따라 메모리가 생기고 소멸 된다)
3.힙영역은 객체가 생성되는 것들을 저장한다. (객체의 놀이터)
멀티 스레드/멀티 프로세스 이해
위에서 메모리 사용방식을 보았듯이 우리 프로그램은 저 메모리 사용방식에 따라 실행이 된다.
그리고 이 실행을 프로세스와 스레드를 통해 이루어진다.
멀티 스레드는 스택 영역을 스레드 개수만큼 분활해서 이용한다.
장점: 스택영역을 분할해서 이용하기에 메모리 사용량은 작다
단점: 스태틱과 힙영역이 공유가 가능에 보안에 취약
멀티 프로세스는 다수의 데이터 저장 영역, 즉 다수의 T메모리(스태틱,스택,힙 구조)를 갖는다.
장점: 메모리 구조를 프로세스 각각 할당 받기에 보안에 강함
단점: 프로세스당 T메모리를 갖기 때문에 메모리 사용량이 크다
객체 지향의 4대 특성
1.캡슐화 :정보 은닉
2.상속 : 재사용
3.추상화:모델링
4.다형성: 사용 편의
클래스와 객체의 차이
클래스: 위에서 스태틱영역에 저장이 되듯 클래스는 분류에 대한 개념 (실체 X) ex) 사람
객체 : 힙 영역에 저장이 되듯 객체는 실체 즉 세상에 존재하는 유일무이한 사물 ex) 김연아
추상화
추상화란 여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악 즉 모델링
ex) 병원에 있는 사람 특징: 시력,몸무게,키,나이 ,먹다(),자다() 등등 ....
추상화의 결과는 클래스 이다
그냥 호기심 (근데 중요하다고 생각)
* (객체 생성에서 의문점 : 클래스 멤버변수는 static 을 안붙여도 static에 저장이 되는데 static을 왜 붙이나...
→static을 붙이면 스태틱 내에서 변수 할당할수 있는 메모리 생성 BUT static이 아닌 클래스 멤버변수(객체 변수)는 이름만 저장되고 메모리는 객체 생성이 되어야 할당)
static 클래스 변수는 언제 사용을 할까..? 그건 바로 다양한 객체라도 동일한 값을 가질 때 사용한다. ex)쥐의 꼬리는 1개
그러면 객체 생성마다 메모리 할당 없이 사용가능 하다. static 변수는 객체가 생성되어도 메모리 할당 없음)
상속
객체 지향에서 상속이란? 확장,세분화,상위클래스-하위클래스,슈퍼클래스-서브클래스
즉 조직도나 계층도가 아닌 분류도
상속관계에서 반드시 만족해야할 문장!!!
-하위 클래스는 상위 클래스 이다. (ex,포유류는 동물이다, 고래는 포유류이다, 고래는 동물이다)
하위 클래스의 객체는 상위 클래스의 메서드를 사용 가능하다. → 코드의 재사용 방지
.
인터페이스
인터페이스: 무엇을 할 수 있을까.? 라는 논리로 만드는 것이 좋다 ex)고래는 헤엄 칠 수 있다. (구현 강제)
상위 클래스 변수명 = new 하위 클래스(); 변수명이 상위 클래스 인스턴스를 가리키고 하위 클래스 메서드 및 변수 사용 못함
하위 클래스 변수명 = new 하위 클래스(); 상위 클래스 하위 클래스 전부 사용 가능하다
즉- 상위 클래스 메서드는 많을 수록 좋고 하위 클래스는 적을 수록 좋다!!
다형성
오버라이딩:같은 메서드 이름 ,같은 인자 목록으로 상위 클래스의 메서드를 제정의
오버로딩: 같은 메서드 이름,다른 인자 목록으로 다수의 메서드를 중복 정의
캡슐화
정보 은닉
접근 제어자:private (본인만 접근 가능) , protected(상속/같은 패키지 내의 클래스 에서 접근가능), public(모두가 접근 가능), default( 같은 패키지 내의 클래스만 접근 가능)
정적 멤버인 경유 클래스명.정적멤버 형식으로 접근해야 좋음(빠르고 넓은 접근 가능)
클래스는 참조변수 즉 주소로 전달 (ex animal a=new anmial()
animal b=a; → 같은 객체를 가리킨다)
'백 엔드 > java' 카테고리의 다른 글
자바 객체 개념 (SOLID) (0) | 2022.04.08 |
---|---|
자바 개념과 이해 2 (0) | 2022.04.07 |
자바 공부하면서 주의한것 (1) | 2021.12.04 |
자바:Java(4) (1) | 2021.10.28 |
자바:Java(3) (0) | 2021.10.27 |