728x90
반응형

얼마 전 면접에서 기술질문을 받았는데 큰 틀만 알고 있어서

제대로 설명을 하지 못한 것에 큰 아쉬움이 있어 살짝 기록해 본다. 

진정한 자바 메모리에 대해 깊게 공부한 내용은 아니지만

일단 기본 내용부터 점점 심화하는 것도 이해를 높이는 좋은 방법이지 않을까 생각한다.

(기술 질문에 약한 편이라 계속 공부중..ㅠ)


자바에 대해 살짝 맛보기 내용부터!

 

JVM (Java Virtual Muchine)

- 자바 가상 머신

- 자바의 바이트 코드를 해석하고 실행하는 역할

 

자바 프로그램의 실행 구조

프로그램

JVM

운영체제

하드웨어

 

자바는 JVM에 의해 실행되므로 어떤 운영체제에서도 동일한 결과를 갖는 것이 큰 장점이다.

단, 한 단계 더 거쳐서 실행되기 때문에 실행 속도면에서 뒤처질 수 있다.

 

런타임 데이터 영역 (Runtime Data Area)

1. Static Area (Method Area)

2. Heap Area

3. Stack Area

4. PC Register

5. Native Method Stack

 

이 글에서는 2, 3번 힙과 스택에 대해서만 정리한다.


Stack Heap
원시타입의 데이터가 값과 저장 Object 타입의 데이터가 저장
Heap 영역에 생성된 Object 타입의 데이터의 참조값이 저장 애플리케이션의 모든 메모리 중 Stack을 제외한 부분
함수가 호출될 때 사용하는 메모리
기능 수행이 끝나면 자동으로 반환되는 메모리
자동으로 관리되지 않는 메모리 영역 (가비지 컬렉터)

 

 

Stack 영역

public class Stack {
	public static void main(String[] args) {
    	int num1 = 20;
        int num2 = 30;
        int sum = 0;
        
        sum = addNum(num1, num2);
        System.out.println(sum);
    }
    
    public static int addNum(int n1, int n2) {
    	int result = n1 + n2;
        return result;
    }
}

 

 

Heap 영역

public class Heap {
	public static void main(String[] args) {
    	int age = 19;
        String name = "mimi";
    }
}

 

Heap 영역에서 GC (Garbage Collection)

- 메모리 누수를 막기 위한 가비지 컬렉션

public class Heap {
	public static void main(String[] args) {
    	String url = "http://";
        url += "mimi.github.io/";
    }
}

url += 부분 코드를 실행하면 기존 문자열에 덧붙이는 것이 아닌

새로운 String 객체를 생성하고 참조하게 되어

기존의 문자열"https://"는 unreachable object가 되어

가비지 컬렉터unreachable object를 제거한다. 

 

위 코드를 실행하면 힙 영역에는 결과적으로 2만 남게 된다.

 

*unreachable object : 스택에 도달할 수 없는 힙 영역의 객체

728x90
반응형

'Coding > Study' 카테고리의 다른 글

[IT 용어] API (Application Programming Interface)  (0) 2023.10.14
[JAVA] 람다식 Lambda  (0) 2023.10.05
[JSP] JSP 강의평가 웹 사이트 개발하기 완료  (0) 2023.10.02
[GitHub] 깃, 깃허브  (0) 2023.09.28
[Kotlin] 코틀린 맛보기  (0) 2023.09.22
728x90
반응형

개발자가 되기 위해 개념들을 학습하고, 다양한 프로젝트를 진행해 보면서

좀 더 정확하게 개념을 짚고 넘어가고 싶다는 생각이 들었다.

그러기 위해서 다양한 IT 용어들에 대해서 기본 개념부터 이해도를 높이고자 기록을 해본다.

 

이번에는 기본 중의 기본인 API에 대한 내용이다.

 

API  (Application Programming Interface)

- 직역 : 응용 프로그램 프로그래밍 인터페이스

- 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다.

예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다.

휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.

 

AWS 사이트에서도 예시를 잘 들어서 이해하는데 도움이 되었다.

쉽게 말해서 한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법이다.


API 종류

Private API

- 내부 API

- 사내에서 쓰는 API로, 제 3자에게 노출되지 않음

 

Public API

- 개방형 API

- 제약없이 누구나 사용 가능한 공개 API

 

 Partner API

- 특정 비즈니스 파트너 간의 데이터 공유

 


참고 사이트

 

API란 무엇인가요? - 애플리케이션 프로그래밍 인터페이스 설명 - AWS

GraphQL은 API용으로 특별히 개발된 쿼리 언어로서, 클라이언트에게 요청한 데이터만 제공하는 것을 우선으로 합니다. 또한 API를 빠르고 유연하며 개발자 친화적으로 만들도록 설계되었습니다. RES

aws.amazon.com

 

아래는 유튜버 코딩애플님의 영상이다.

IT현황부터 프론트, 백 구분 없이 정말 유용한 내용들이 많아 즐겨보는 유튜버 중 한 명이다.

 

728x90
반응형

'Coding > Study' 카테고리의 다른 글

[JAVA] 자바의 메모리 영역 (stack, heap)  (0) 2023.11.15
[JAVA] 람다식 Lambda  (0) 2023.10.05
[JSP] JSP 강의평가 웹 사이트 개발하기 완료  (0) 2023.10.02
[GitHub] 깃, 깃허브  (0) 2023.09.28
[Kotlin] 코틀린 맛보기  (0) 2023.09.22
728x90
반응형

람다식

- 익명 함수(anonymout function)를 생성하기 위한 식

- 객체 지향 언어보다는 함수 지향 언어에 가깝다.

- 자바 코드가 간결해진다.

- 컬렉션의 요솔르 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.

- (매개변수) -> { 실행코드 } 형태로 작성

 

람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체

// Runnable 인터페이스 익명 구현 객체 생성하는 전형적인 코드
Runnable runnable = new Runnable() {
    public void run() { ... }
}

// 익명 구현 객체를 람다식으로 표현
Runnable runnable = () -> { ... };

 

 

타겟 타입과 함수적 인터페이스(@FunctionalInterface)

- 람다식의 타겟 타입은 하나의 추상 메소드가 선언된 인터페이스(두 개 이상 선언된 것은 타겟 타입 사용 불가)

- @FunctionalInterface 어노테이션을 인터페이스 선언 시 붙여주면

  두 개 이상의 추상 메소드가 선언되면 컴파일러가 체킹해 오류를 발생해준다. (선택사항)

@FunctionalInterface
public interface MyFunctionalInterface {
    public void method();
    public void otherMethod();	// 컴파일 오류
}

 

 

정적 메소드와 인스턴스 메소드 참조

- 정적(static) 메소드를 참조할 경우 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술

public class Main {
    public static int staticMethod(int x, int y) {	// 정적 메소드
        return x + y;
    }

    public int insatanceMethod(int x, int y) {	// 인스턴스 메소드
        return x + y;
    }

    public static void main(String[] args) {
        IntBinaryOperator oper;

	    // 정적 메소드 참조
        oper = (x, y) -> Main.staticMethod(x, y);
        System.out.println("결과1 : " + oper.applyAsInt(1, 2));

        oper = Main::staticMethod;
        System.out.println("결과2 : " + oper.applyAsInt(3, 4));

	    /// 인스턴스 메소드 참조
        Main obj = new Main();
        oper = (x, y) -> obj.insatanceMethod(x, y);
        System.out.println("결과3 : " + oper.applyAsInt(5, 6));

        oper = obj :: insatanceMethod;
        System.out.println("결과4 : " + oper.applyAsInt(7, 8));
    }
}

 

728x90
반응형
728x90
반응형

이번 추석 연휴기간동안 나동빈 개발자님의 인프런 강의로 JSP 웹사이트 구축을 복습해보는 시간을 가졌다.

 

처음에는 게시판 웹 사이트를 만들어보았고 (클릭 시 GitHub이동)

두 번째로는 회원 전용 강의 평가를 할 수 있는 웹 사이트를 만들었다.

 

스프링, 스프링부트만 최근에 사용하다가 단순 JSP로 웹 사이트를 구축해보니

확실히 직접적으로 코딩해야하는 양이 많고, 사소한 오류를 찾는데 시간이 꽤나 소요되었다.

 

디자인의 경우 부트스트랩을 활용했는데 나같은 경우는 최신화된 요소로 작업하기 위해

CDN으로 포함하여 적절하게 구성했다.

기능을 중점적으로 작업하면서도 디자인 부분 일부는 적절하게 수정해서

단순 JSP 웹 사이트 프로젝트를 완성해보았다.

 

 

JSP 강의평가 웹 사이트 개발하기
- 소요 기간 : 2일
- 사용 IDE : STS

 

기능

- 부트스트랩을 활용한 디자인 적용

- 로그인, 로그아웃, 회원가입

- 강의 평가 데이터베이스 구축 및 데이터 모델링

- 이메일 인증

- 미니 검색 엔진 (필터링 포함)

- 강의평가 조회

- 강의평가 등록 (모달), 삭제, 추천

- 강의평가 신고 (모달 - 관리자 이메일로 내용 발송)

- XSS 방어

 

추가로 구현해볼 기능

- 회원정보 수정, 회원 탈퇴

- 글 수정

 

 

 

- JSP 강의 평가 웹사이트 소스 코드

https://github.com/jangmimi/LectureEvaluation

 

GitHub - jangmimi/LectureEvaluation: LectureEvaluation web site

LectureEvaluation web site. Contribute to jangmimi/LectureEvaluation development by creating an account on GitHub.

github.com

728x90
반응형

'Coding > Study' 카테고리의 다른 글

[IT 용어] API (Application Programming Interface)  (0) 2023.10.14
[JAVA] 람다식 Lambda  (0) 2023.10.05
[GitHub] 깃, 깃허브  (0) 2023.09.28
[Kotlin] 코틀린 맛보기  (0) 2023.09.22
[JAVA] StringBuilder와 StringJoiner  (0) 2023.09.19
728x90
반응형

Git(깃) :

- 분산형 버전 관리 시스템

- 모든 소스코드가 공개된 오픈 소스

- 리눅스, 맥OS, 윈도우 운영체제 지원

- 장점) 이력 기록 및 추적, 원격 저장소 및 공유, 변경 이력 병합

 

GitHub(깃허브) :

- 깃을 이용하여 관리하는 프로젝트의 원격 저장소 역할을 수행하는 웹 호스팅 서비스

- 장점) 호스팅 서비스, 공개 및 비공개 저장소, 고급 기능

 

 

터미널에서 새 브랜치 생성 후 원격 저장소에도 반영하는 방법

- 터미널에서 새 브랜치 생성

  >> git branch 새브랜치명

 

- 현재 브랜치 상태 확인

  >> git branch -a

  (a는 all의 약자로, 현재 저장소에서 로컬 브랜치와 원격 브랜치 모두 보여주도록 하는 옵션)

새 브랜치를 로컬 브랜치에 생성 후 확인 모습 (원격 브랜치에는 새 브랜치가 반영 안된 상태)

- 원격 브랜치에 반영하기

  >> git push origin 새브랜치명

새 브랜치를 원격 브랜치에 반영 후 확인 모습

 

 

 

참고 서적

박미정의 깃&깃허브 입문

728x90
반응형

+ Recent posts