Java

Java

서블릿, 서블릿 컨테이너

서블릿(Servlet) : 서블릿은 WAS내의 서블릿 컨테이너에서 동작하며, 클라이언트의 요청에 맞춰 동적인 결과를 만들어줍니다. 요청을 받으면 요청에 맞는 로직을 실행하고 클라이언트에게 HTTP 형식으로 응답합니다. 근데 서블릿만으로는 한계가 있는 것이, 클라이언트가 URL을 입력하여 요청을 하게 되면 정보를 처리하기 위해 스레드를 만들고 객체를 생성하고 직접 서블릿을 맵핑하는 등의 작업이 있어야 한다. 이를 손쉽게 처리해주는 것이 서블릿 컨테이너이다. 서블릿 컨테이너 서블릿을 담고 관리해주는 컨테이너입니다. 주요 기능으로는 서블릿의 생명주기를 관리하고 통신을 지원합니다. 또한 클라이언트의 요청을 받을 때마다 새로운 자바 스레드를 형성하며 멀티쓰레드를 지원하고 관리합니다. 이를 통해 개발자가 비즈니스 ..

Java

[Java] 패키지(package) 존재 이유는?

Package는 클래스명의 고유성을 보장하기위해 존재한다 필요한 예시는 아래와 같다. 다른 두 사람이 서로 다른 목적을 가진 클래스를 이름이 같게 생성했다고 하면, 서로 다른 패키지를 사용함으로써 충돌을 피할 수 있다. 간단히 말하자면 자바에서 package없이 서로 다른 경로의 클래스에서 같은 이름으로 정의한 메소드를 모두 사용 할 방법이 없다는 것이다.

Java

[Java] this. 와 this() / 생성자

this. this는 객체 자신을 가르친다. 자신의 객체에 접근 할 때 사용된다. 주로 멤버변수와 메소드의 매개변수의 이름이 동일할 때, 이를 구분하기 위해 사용된다. 사용예제 public class People{ //멤버변수 int age; //메소드 void setAge(int a){ age = a; } } 위에서 매개변수 a의 이름을 멤버변수와 같게 하여 사용하고 싶으면 아래와 같이 this 키워드를 이용하면 된다. public class People{ //멤버변수(필드) int age; void setAge(int age){ this.age = age; //멤버변수 = 인자 } } this() this()는 같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용된다. - 생성자 코드에서만 사용 할..

Java

[Java] JVM, 자바 실행과정, 메모리 영역, 참조변수

JVM 이란 자바 가상 머신으로서, 컴파일 된 바이트 코드를 기계어로 변환하고 메모리관리와 가비지 컬렉션을 수행합니다. 또한, JAVA와 OS(운영체제) 사이에서 중개자 역할을 하며 자바가 os에 구애받지 않고 독립적으로 작동하게 해줍니다. 런타임 데이터 영역 (Runtime Data Area) JVM의 메모리 영역, 자바 애플리케이션을 실행할 때 사용되는 데이터들 적재하는 영역이다. 자바의 실행과정 .java파일이 javac 컴파일러를 통해 .class 바이트코드로 컴파일된다. Class Loader를 통해 .class 파일들을 JVM에 올린다 JVM에 있는 .class 파일들을 Execution Engine의 Interpreter와 JIT Complier를 통해 해석된다 해석된 바이트 코드는 런타임 ..

Java

BufferedReader & BufferedWriter

scanner와 System.out.println() 를 대신하여 사용 할 수 있다. 속도 측면에서 훨씬 빠르기 때문에 데이터 처리의 효율성이 좋다. 바로 전송하는 것 보다, 중간에 메모리 버퍼를 두어서 데이터를 묶어 이동하는 것이 빠르기 때문이다. 대신에 받은 데이터는 String으로 인식하므로 가공과정이 추가로 필요하다. BufferedReader BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언 String str = bf.readLine(); //String 입력받음 int i = Integer.parseInt(bf.readLine()); //입력을 int로 형변환 입력은 readLine()이라는 메서드를 ..

Java

[Java/자바] stream, map, collect

Stream 자바의 Stream은 java8에 추가된 기능으로 컬렉션에 저장된 요소들을 람다식으로 처리 할 수 있게 하는 코드패턴이다. for문과 if문을 사용하지 않고도 간결하게 코드를 변경 할 수 있다. 원본 데이터를 읽는데, 원본데이터 변경을 하지 않는다. 결과를 컬레션이나 배열에 담아 반환 할수있다. Map() map() 메서드는 값을 변환해주는 람다를 인자로 받아, 조건에 맞게 새로운 데이터를 반환 할 때 사용된다. Collect() Stream 데이터를 원하는 자료형으로 변환 해준다. 예를들어, collect(Collectors.toList()) 는 List형으로 자료형을 변환해준다. 아래는 예시 코드이다. @Override public void findAll(Model model) { Lis..

Java

extends와 implements 차이

객체지향 OOP(Object-Oriented Programming)의 특징 중 상속성에 관한 이야기이다. 프로젝트를 진행하며 자주 사용하게 되었는데 차이점이 궁금하였다. extends 부모 객체에서 선언, 정의를 모두 한다. 자식에서 오버라이딩을 할 필요가 없다. 부모의 메소드, 변수를 그대로 사용 가능하다. 나의 경우에는 프로젝트를 진행할때 - entity를 구성시 계속 중복되는 필드들을 따로 class에 담아 extends해 주는 방식으로 자주 사용하였다. - Repository 를 사용할때 extends JpaRepository를 하여 JPA에서 기본으로 제공하는 메서드를 이용했다. implements 부모 객체는 선언만 한다. 자식에서 정의를 하는 오버라이딩(재정의)가 필요하다. 나의 경우에는 -..

Java

Collections

List ArrayList a1 = new ArrayList(); //제네릭 이용해 데이터타입을 String으로 설정 a1.add("one"); a1.add("two"); a1.add("three"); // 1. 데이터 삽입 a1.add(0, "first") // 데이터 중간삽입 a1.set(0,"first") // 2. 데이터 수정 a1.get(0); // 3. 데이터 가져오기 a1.remove //4. 데이터 삭제 // 빈번한 데이터 삽입, 삭제에 용이한 구조 Set - 집합 - 중복된 데이터는 저장이 되지 않음(집합이므로) HashSet s1 = new HashSet s1.add(1);//list다르게 인덱스가 존재하지 않음 s1.add(2);//list다르게 인덱스가 존재하지 않음 s1.add(1..

꿈꾸는야오옹
'Java' 카테고리의 글 목록