일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #크랙미
- Spring
- #크랙미 9번
- #심플즈 크랙미
- java8
- #보안이슈
- #크랙미4번
- springframework
- 리버싱
- #크랙미3번
- #abex크랙미4번
- #크랙미 5번
- #크랙미2번
- #abex
- #크랙미 10번
- #보안뉴스
- leetcode
- #파밍
- GraphQL
- #abex크랙미
- #리버싱
- #고클린
- Easy
- java
- #심플즈
- Today
- Total
목록개발 지식/JAVA (9)
Halo World
[자바 Stack과 Heap 영역] 새로운 변수와 객체를 선언하거나, 새로운 메소드를 호출하거나, 문자열 선언 또는 유사한 작업을 수행할 때, JVM은 stack 또는 heap 메모리 영역에 필요한 메모리를 할당한다. Stack 메모리 영역 정적 메모리 할당 및 쓰레드 실행을 위해 사용되는 영역으로 메서드에 고유한 기본 값과 메서드에서 참조하는 힙 개체에 대한 참조 값을 포함하고 있다. LIFO(Last-In-First-Out) 순서로 동작하며, 새 메소드가 호출될 때마다 스택 상단에 해당 메소드에 대한 새 블록이 생성된다. 메서드 실행이 완료되면, 해당 스택에서 pop되고, 호출한 메서드로 흐름이 돌아가게 된다. 특징 스택 내부의 변수는 변수를 생성한 메서드가 실행되는 동안만 존재한다. 메서드 실행에 ..
자바에서 main 메소드를 작성할 때 public static void main(String args[]) 라고 무의식적으로 작성하고는 합니다. 이때 static은 왜 써주는 것일까요? 안써주면 안될까요..?!!! static을 메소드에 붙이면 정적 메소드가 되고, 변수에 붙이면 정적 변수가 됩니다. 이렇게 '정적'으로 선언을 하게 되면 객체를 생성해주지 않아도 프로그램 실행시 자동으로 메모리에 적재됩니다. main 메소드 같은 경우는 객체를 생성하지 않아도 자동으로 실행되어 작업을 수행해야하는 부분이기 때문에 static으로 선언하는 것 입니다. 이와 비슷하게 public 접근 제어자는 JVM이 main 함수가 어디에 있건 접근 가능해야하기 때문에 사용합니다. 그리고 또 하나 궁금한 부분! String..
import java.util.Stack; public class StackTest2{ public static void main(String args[]){ Stack stack = new Stack(); int arr[] = {10,20,30,40,50}; System.out.println(stack.empty()); // 비어있으면 true, 안 비어있으면 false를 리턴 for(int i : arr){ stack.push(i); //배열 arr의 값을 차례대로 stack에 push } System.out.println(stack); // 현재 Stack의 상태 확인 stack.push(7); //스택에 7 삽입 System.out.println(stack); //스택에 7이 삽입되었는지 확인 s..
라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메소드를 설계하는 것이 바람직하다. 객체 생성을 막기위해 생성자를 호출하지 못하게 하거나, 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 그리고 특정 메소드를 호출할 수 없도록 제한할 필요가 있다. 자바는 이를 구현하기 위해 접근 제한자(Access Modifier)를 제공한다. 접근 제한 적용 대상 접근할 수 없는 클래스 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 없음 default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스 private 필드, 생성자, 메소드 모든 외부 클래스 출처..
| 싱글톤(Singleton) 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤(Singleton)이라고 한다. 싱글톤을 만들기 위해서는 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다. 그리고 이를 위해 생성자 앞에 Private 접근 제한자를 붙여준다. > 싱글톤을 만드는 코드 Public class Singleton{ // 정적 필드private static Singleton A = new Singleton(); // 생성자private Singleton() {} // 정적 메소드static Singleton getInstance(){return A;}} 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 ..
| 캡슐화(Encapsulation) 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용 가능 > 캡슐화의 목적 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위해 접근제한자 (public, private)를 사용하여 설정함 > 캡슐화를 통한 정보 은폐의 장점 - 객체에 포함된 정보의 손상과 오용을 막을 수 있음 - 객체 내부의 조작 방법이 바뀌어도 사용방법을 바뀌지 않음 - 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지됨 | 상속(Inheritance) 상위 객체의 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용하 수 있도록 하는 것 > 장점 - 하위 객체를 쉽고 ..
| 컴파일러 - 원시 프로그램, 고급언어로 작성된 문장을 처리하여 기계어 또는 컴퓨터가 사용할 수 있는 코드(목적 프로그램)으로 번역해주는 프로그램 - 프로그램 전체를 한꺼번에 번역 후 실행 - 목적 프로그램 생성으로 메모리 사용 - 컴파일러에 의해 번역된 프로그램은 언제든지 실행될 수 있는 실행 가능한 프로그램 - 번역 속도 느림 - 실행 속도 빠름 - 디스크에 저장됨 - 특정 시스템에서 번역된 실행파일이 다른 시스템에서는 실행되지 않는다 - 사용 예 : C, 포트란 | 인터프리터 - 고급 언어로 작성된 명령문을 한번에 한 줄씩 번역하고 실행하는 프로그램 - 메모리 사용하지 않음 - 주요 스크립트 언어에서 대부분 사용 (웹이 작동하는 방식이 전형적인 인터프리터 기법) - 목적 프로그램 생성하지 않음 -..
| 모델1 : JSP 파일내에서 뷰와 컨트롤러 모두 실행되어지는 구조 [모델1의 구조] > 장점 - 단순한 페이지 흐름으로 인한 개발기간 단축 - 초보자도 쉽게 배울 수 있음 - 중소형 프로젝트에 적합 > 단점 - 웹 어플리케이션이 복잡해질수록 유지보수가 어려움 - 디자이너와 개발자간의 활발한 의사소통이 필요함 | 모델2 : 컨트롤러를 통해 비즈니스 로직과 뷰가 분리된 형태 JSP에서는 뷰를 담당하고, 자바 클래스에서 비즈니스 로직을 담당. 뷰는 어떠한 처리로직도 포함하지 않음. [모델2의 구조] > 장점 - 비즈니스 로직과 뷰의 분리로 유지보수와 확장이 용이 - 개발자와 디자이너의 작업이 분리되어 분업이 편리함 - 중, 대형 프로젝트에 적합 > 단점 - 초기 구조설계에 많은 시간이 필요하므로 개발기간이..
| 디자인 패턴 소프트웨어의 개발 방법을 공식화한 것 MVC 패턴, 싱글톤 패턴 등이 이에 속함 | MVC 패턴 Model, View, Controller의 약자로 어플리케이션을 세가지 역할로 구분 > Controller - 클라이언트의 요청을 받았을 때, 그 요청에 대해 실제 업무를 수행하는 컴포넌트를 호출하는 역할 - 클라이언트 요청에 대해 모데과 뷰를 결정하여 전달 - 모델에 명령을 보냄으로써 모델의 상태를 변경하 수 있고(예 : 워드 프로세서에서 문서를 편집), 관련된 뷰에 명령을 보냄으로써 모델의 표시 방법을 바꿀수 있다(예 : 문서를 스크롤하는 것). > Model - 데이터 저장소와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 역할 - 모델의 상태에 변화가 있을 때 컨..