@ 주제 

파일정보 확인 

 

@ 목적 

파일의 정보를 확인해본다.

 

@ 내용 

파일 정보가져오기

 

 

 

import java.io.File;

import java.io.IOException;

 

 

public class FileTest {

 

    public static void main(String[] args) {

        

       // 해당 파일의 경로와 파일이름을 입력한다.

        File file = new File("filefolder\\test.txt");

 

       // 파일의 존재 유무를 확인한다.

        if(file.exists()){

            

            try{

                

                System.out.println("getName: " + file.getName());  // 파일 이름 출력

                System.out.println("getPath: " + file.getPath());    // 파일 경로 출력

                // 파일 절대 경로 출력              

                System.out.println("getAbsolutePath : "+ file.getAbsolutePath());  

                // 파일 정규 경로 출력

                System.out.println("getCanonicalPath : "+ file.getCanonicalPath());

                // 상위 폴더 출력

                System.out.println("getParent : " + file.getParent());   

                

           // 파일의 쓰기/읽기 권한 체크

          if(file.canWrite()) System.out.println(file.getName() + "은 쓸 수 있습니다.");

          if(file.canRead()) System.out.println(file.getName()+ "은 읽을 수 있습니다.");

                

                // 객체의 파일, 폴더 여부 체크

                if(file.isFile()){

                    System.out.println(file.getName() + "은 파일입니다.");

                }else if(file.isDirectory()){

                    System.out.println(file.getName() + "은 폴더입니다.");

                }else{

                    System.out.println(file.getName() + "은 파일도 폴더도 아닙니다.");

                }

                

          // 파일 내용 길이 출력

          System.out.println(file.getName() + "의 길이는 "+ file.length() + " 입니다.");

            

            }catch(IOException e){

                System.err.println(e);

            }

        

        }else{

            System.out.println("파일을 찾을 수 없습니다. ");

        }

    }

}

 

 

 

'Java' 카테고리의 다른 글

JAVA) VO 값 전부 꺼내기  (0) 2020.09.11
directory 파일 목록 출력하기  (0) 2020.08.25
Client IP 가져오기  (0) 2020.08.19
File 정리  (0) 2020.08.18
JAVA ) 직접 경험한 경력직 기술 면접 질문 모음  (0) 2020.07.20

@ 주제 

클라이언트의 IP를 가져오기 

 

@ 목적 

 클라이언트의 IP를 가져와 용도에 맞게 사용해본다.

 

@ 내용 

 

클라이언트의 IP 가져오기 정리

 

- 관리자 페이지의경우 일반 사용자의 접근을 제한하기 위해

- 데이터베이스에 IP를 등록해놓고 interceptor에서 등록된 IP가 아닌경우 접근을 제한하게할 수 있다.

 

- 1. interceptor을 생성한다.

  -> class를 생성하고 extends HandlerInterceptorAdapter해준다.

  -> 접근을 제한할거니까 preHandle를 override해준다.

  -> (preHandle은 클라이언트의 요청을컨트롤러에 전달하기전에 호출된다. )

 

- 2. 클라이언트의 IP값을 가져온다.

  -> request.getRemoteAddr(); // 클라이언트의 ip를 얻을 수 있다.

  -> * 로컬에서 테스트하면 return 0:0:0:0:0:0:0:1 하니까 정확하게 확인해보고 싶으면 아이피로 접근하던 개발에서 접근해서 확인하면된다.

 

- 3. 등록된 관리자들의 ip를 가져온 뒤 요청온 ip와 비교하여 관리자가 맞으면 접근가능하게. 관리자가 아니라면 접근불가페이지로 보낸다.

 

 

--

request.getRemoteAddr(); 요것만 사용해서 ip를 가져오면 된다고 알고있었는데

request.getHeader("X-Forwarded-For") 가 null인지를 먼저 확인해야하는걸 알았다.

 

X-Forwarded-For(XFF)는 HTTP Header 필드 중 하나이고..

웹 서버나 WAS 앞에 L4 같은 Load balancers 나 Proxy server, caching server 등의 장비가 있을 경우 웹서버는 Proxy server 나

장비IP에서 접속한 것으로 인식합니다.

그렇기 때문에 웹서버는 실제 클라이언트 IP가 아닌 앞단에 있는 Proxy서버 IP를 요청한 IP로 인식하고, Proxy장비 IP 로 웹로그를 남기게 됩니다.

그리고 XFF 는 사실상의 표준이지 정식 RFC 에 포함된게 아니므로 대개는 착실하게 저 헤더를 사용하지만 엉뚱한 헤더를 사용하는 제품들이 있다고합니다.

 

중에 하나인 WebLogic Connector(mod_wl) 는 저 헤더를 사용하지 않고 WL-Proxy-Client-IP 나 Proxy-Client-IP  같은 전혀 엉뚱한 헤더를 사용하므로 만약 만드는 웹 어플리케이션이

WebServer, WAS, L4, proxy 종류에 상관없이 client IP 를 잘 가져오기를 바란다면 다음과 같은 순서로 IP 를 얻어내야 한다.

 

String ip = request.getHeader("X-Forwarded-For");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

     ip = request.getHeader("Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

     ip = request.getHeader("WL-Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

     ip = request.getHeader("HTTP_CLIENT_IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

     ip = request.getHeader("HTTP_X_FORWARDED_FOR");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

     ip = request.getRemoteAddr();

}

 

--결론

클라이언트의 올바른 ip주소를 가져오려면 위와같이 실행해서 결과를 가져와야한다.

왜냐면 프록시들의 주소를 가져올 수 있기때문에~~ 그리고 was 환경마다 X-Forwarded-For를 엉뚱하게 사용하는게 있기때문에!!

 

'Java' 카테고리의 다른 글

directory 파일 목록 출력하기  (0) 2020.08.25
FILE 정보 확인해보기  (0) 2020.08.25
File 정리  (0) 2020.08.18
JAVA ) 직접 경험한 경력직 기술 면접 질문 모음  (0) 2020.07.20
JAVA 언어의 장단점  (0) 2020.07.13

@ 주제 

File Class 알아보기 

 

@ 목적 

File Class를 알아본다.

 

@ 내용 

 

File 클래스 정리

 

java.io 패키지는 기존의 파일이나 폴더에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다. 이 클래스를 이용해서 파일과 폴더에 대한 다양한 기능을 제공한다.

 

파일을 나타내는 객체를 생성하려면 다음과 같은 File 클래스의 생성자 함수를 이용한다.

 

 

File 클래스의 생성자

 

설명

 

File(File parent, String Child)

 

parent 객체 폴더의 child 라는 파일에 대한 File 객체를 생성한다.

 

File(String pathname)

 

pathname에 해당되는 파일의 File 객체를 생성한다.

 

File(String parent, String, child)

 

parent 폴더 경로의 child라는 파일에 대한 File 객체를 생성한다.

 

File(URI uri)

 

file uri 경로에 대한 파일의 File 객체를 생성한다.

 

 

 

* File 클래스의 메소드

 

 

 

File 클래스의 메소드

 

설명

 

File getAbsoluteFile()

 

파일의 절대 경로를 넘겨준다.

 

String getAbsolutePath()

 

파일의 절대 경로를 문자열로 넘겨준다.

 

File getCanonicalFile()

 

파일의 Canonical 경로를 넘겨준다.

String getCanonicalPath()

 

파일의 Canonical 경로를 문자열로 넘겨준다.

 

String getName()

 

파일이나 폴더의 이름을 넘겨준다.

 

String getParent()

 

부모 경로에 대한 경로명을 문자열로 넘겨준다.

File getParentFile()

 

부모 폴더를 File의 형태로 리턴한다.

 

String getPath()

 

파일의 경로를 문자열의 형태로 리턴한다.

 

long getTotalSpace()

 

하드디스크의 총 용량을 리턴한다.

 

long getUsableSpace()

 

하드디스크의 사용 가능한 용량을 리턴한다.

 

long getFreeSpace()      하드디스크의 남은 공간을 리턴한다.

int hashCode()

 

hash code를 반환한다.

 

long lastModified()

 

해당 경로 파일의 최종 수정 일자를 반환한다.

 

long length()

 

해당 경로 파일의 길이를 반환한다.

Path toPath()

 

java.nio.file.Path 객체로 반환한다.

 

URI toURI()

 

URI 형태로 파일 경로를 반환한다.

 

File[] listRoots()

 

하드디스크의 루트 경로를 반환한다.

 

String[] list()

 

경로의 파일들과 폴더를 문자열 배열로 반환한다.

 

String[] list(FilenameFilter filter)

 

filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환한다.

 

File[] listFiles()

 

해당 경로의 파일들과 폴더의 파일을 배열로 반환한다.

 

File[] listFiles(FileFilter filter)

 

filter에 만족되는 파일들과 폴더를 File 배열로 반환한다.

 

File[] listFiles(FilenameFilter filter)

 

filter에 만족되는 파일들과 폴더를 File 배열로 반환한다.

 

 

 

* File 생성/수정/삭제 메소드

 

 

 

File 생성 수정 삭제 메소드

 

설명

 

boolean createNewFile()

 

주어진 이름의 파일이 없으면 새로 생성한다.

 

static File createTempFile(String prefix, String suffix)

 

default temporary-file 디렉토리에 파일 이름에 prefix와 suffix를 붙여  임시파일을 생성한다.

 

static File createTempFile(String prefix, String suffix, File directory)

 

새로운 임시파일을 파일 이름에 prefix와 suffix를 붙여 directory 폴더에 생성한다.

 

boolean delete()

 

파일이나 폴더를 삭제한다. 단, 폴더가 비어있지 않으면 삭제할 수 없다.

 

void deleteOnExit()

 

자바가상머신이 끝날 때 파일을 삭제한다.

 

boolean mkdir()

 

해당 경로에 폴더를 만든다.

 

boolean mkdirs()

 

존재하지 않는 부모 폴더까지 포함하여 해당 경로에 폴더를 만든다.

 

boolean renameTo(File dest)

 

dest 로 File 이름을 변경한다.

 

 

* File 체크 메소드

 

 

 

File 체크 메소드

 

설명

 

  boolean exists()

 

파일의 존재 여부를 리턴한다.

 

  boolean isAbsolute()

 

해당 경로가 절대경로인지 여부를 리턴한다.

 

  boolean isDirectory()

 

해당 경로가 폴더인지 여부를 리턴한다.

 

  boolean isFile()

 

해당 경로가 일반 file 인지 여부를 리턴한다.

 

  boolean isHidden()

 

해당 경로가 숨김 file 인지 여부를 리턴한다.

 

 

 

* File 권한 메소드

 

 

 

File 클래스 권한 관련 메소드

 

설명

 

boolean canExecute()

 

파일을 실행할 수 있는지 여부를 리턴한다.

 

boolean canRead()

 

파일을 읽을 수 있는지 여부를 리턴한다.

 

boolean canWrite()

 

파일을 쓸 수 있는지 여부를 리턴한다.

 

boolean setExecutable(boolean executable)

 

파일 소유자의 실행 권한을 설정한다.

 

boolean setExecutable(boolean executable, boolean ownerOnly)

 

파일의 실행 권한을 소유자 또는 모두에 대해 설정한다.

 

boolean setReadable(boolean readable)

 

파일의 소유자의 읽기 권한을 설정한다.

 

boolean setReadable(boolean readable, boolean ownerOnly)

 

파일의 읽기 권한을 소유자 또는 모두에 대해 설정한다.

 

boolean setReadOnly()

 

파일을 읽기 전용으로 변경한다.

boolean setWritable(boolean writable)

 

파일의 소유자의 쓰기 권한을 설정한다.

 

boolean setWritable(boolean writable boolean ownerOnly)

 

파일의 쓰기 권한을 소유자 또는 모두에 대해 설정한다.

 

'Java' 카테고리의 다른 글

FILE 정보 확인해보기  (0) 2020.08.25
Client IP 가져오기  (0) 2020.08.19
JAVA ) 직접 경험한 경력직 기술 면접 질문 모음  (0) 2020.07.20
JAVA 언어의 장단점  (0) 2020.07.13
JVM 그것이 알고싶다.  (0) 2020.07.12

3년을 꽉 채운 4년차가 된 나는 이직을 결심했다! 

 

 

이력서 작성을 위한 준비! 

우선 쉬는 동안 간단한 토이프로젝트를 구축해 올려보았다.

기능은 게시글, 댓글, 대댓글, 좋아요, 신고하기 등등~! 

기본적인 커뮤니티의 기능을 갖춘 프로젝트를 구축! 

 

허접하지만 화면설계서까지 그려보았다 ㅎㅎ 

 

여기까지가 면접 전 준비 과정이었고  ~ 

 

총 8군데? 정도의 기업에 기술 면접을 다니기 시작했다. 

 

최종적으로 결과는 1곳을 제외한 모든 곳에서 기술 면접 합격을 받았다!! > < 

 

모두가 기쁜 이직을 준비하기 위해 내가 받았던 질문들을 정리해 공유해본다. 

 

 

우선 어딜가나 처음엔 자기소개로 시작한다. 

 

- 가장 최근에 경험했던 프로젝트와 본인에 대해 간단한게 자기소개 부탁드려요. 

 

 

JAVA 관련 

- 객체지향프로그래밍이란 ? 

- JVM의 영역에 대해 설명할 수 있나요? - 이부분에서 3개의 영역(메소드, 스택, 힙)에 대해 설명했음

- JVM 영역에 대해 조금 더 깊은 설명 가능하신가요?

- 인터페이스와 추상클래스의 차이점은 무엇이라고 생각하나요? 

- Static에 대해 설명해주세요 

- Thread 데드락이란 무엇인지 설명해주세요. 

- Thread 사용했던 경험과 문제가 발생했을때 해결했던 경험을 들려주세요. 

- 자바의 특징과 특징별 세부 내용도 설명해주세요.

- 접근제한자에 대한 설명과 실제로 어떤 상황에 사용했는지, 그 차이점은 어떤게 있는지 이야기해주세요. 

- private을 사용한 생성자에 대해 들어보셨나요?

  사용했다면 경험을, 사용해보지 않았다면 어떤 상황에 사용될지 이야기해주세요. 

- 일반적인 배열과 컬렉션타입의 List는 어떤 차이점이 있는지 설명해주세요.

- ArrayList와 LinkedList를 차이점과 구조를 설명해주세요.

- List<String> a = new ArrayList<>();  ==> 왜 선언할때 ArrayList가 아닌 List로 받았다고 생각하시나요?

- (컴파일에 전혀 문제가 없는 코드를 보여주며 ) 10개 이상의 문제가 될만한 포인트가 있는데 어디인지 리뷰해주세요

 ( Exception, String Pool, Collection별 차이에 대해 이해하고 있는지 정도의 코드였음) 

- Stack과 Queue에 대해 설명해주세요 그리고 사용했던 예시도 알려주세요.

- Stream에 대해 설명해주세요, 사용 경험도 이야기해주세요.

- process와 thread 차이점에 설명해주세요.

- 동기화란 무엇인가요? 설명과 사용예시를 들려주세요. 

- 동기화에서 발생될 수 있는 문제는 어떤게 있고 그문제는 어떻게 처리되어야할까요?

- POJO에 대해 설명해주세요. 

 

 

 

## 코딩 테스트 (대부분의 문제는 코드를 떠나서도 영어로 되어있다. 문제, 지문 등등 ..)  ##

 

* 시험지 형태의 문제 

- String Pool에 대한 이해도 테스트

  ( ==, equal() 함수를 이용해 문자열 비교, 커스터마이징된 equal()함수를 보고 출력 결과 작성하기)

 

- Static과 생성자에 문자열을 붙이도록 코드해두고 객체를 생성하여 어떤 결과가 나오는지 작성하기

 

- 코드를 보고 어떤 Exception이 발생하게 될지 예측하며 Exception 처리 방법을 이야기해보세요.

 

- 코드를 보여주며 여기서 발생될 문제를 찾고 해결방안을 제시하시오. 

 

- 주어진 수가 홀수인경우 +1 짝수일 경우 /2 를 하는 함수를 제공,

  두 개의 숫자 A, B를 보여주며 해당 함수를 몇번 돌렸을때 숫자 A가 B값이 되는지 물어보는 문제 

 

-  돌려 물어보는 문제도 있었다. 

예) 

톰은 에반이 자신의 연락처를 정확하게 알고 있는지 확인하고 싶었다.

톰은 에반과 직접적으로 대화할 수 없다. 

샘은 톰과 에반 사이에 전달자 역할을 해주는 인물이며 카드에 내용을 확인할 수 있다. 

샘은 연락처를 알아서는 안된다.

 

어떻게하면 톰은 샘 몰래 에반에게 연락처를 전달할 수 있을까? 

(답을 모르겠다면 이 문제의 의도를 파악해보세요.) 

 

 

* 코드를 직접 작성해 풀었던 문제 

- 비트 연산 문제 

- 재귀함수 구현 

- 문자열 뒤집기 (stack을 사용하지 않고 다른 방법들을 이용하기)

- 중복 문자열 검색 

- 중복되지 않은 문자열 검색 

- 주어진 숫자들 중 가장 큰 차이가 나는 숫자구하기

 

예) 제시 - 1257893  

0. 숫자 정렬 ::: 1235789

1 -> 2  == 차이 1 

2 -> 3  == 차이 1 

3 -> 5  == 차이 2

5 -> 7 == 차이 2

7 -> 8  == 차이 1 

8 -> 9  == 차이 1 

 

결과 : return 2 ; 

 

 

 

 

Spring 

- 사용했던 Spring 버전은 어떤거였나요?

- AOP에 대해 설명해주세요

- DI에 대해 설명해주세요 

- bean에 대해 설명해주세요.

- Filter와 Interceptor에 대해 설명해주고, 실행 순서를 알려주세요.

- Filter와 Interceptor의 차이점에 대해 설명하세요.

- Controller에서 Service를 사용할 때 인터페이스를 거쳐서 서비스를 구현하는데,

  이런 과정이 꼭 필요하다고 생각하나요 ?

  인터페이스를 거치치 않고 바로 서비스를 콜하면 더 낫지 않을까요? 의견을 들려주세요.

- 요즘 Spring에서 밀고있는 추세는 어떤게 있는지 알고 계신가요?

- Spring bean은 어떤 패턴으로 작성되나요?

- Spring bean은 무조건 싱글톤인가요? 아니라면 아닌 경우를 본적이 있는지요?

- Security 설정을 경험해 본적이 있나요? 사용했던 이야기를 들려주세요.

- Framework 생성부터 시작하시나요? 어떤 식으로 작업했는지 프로세스를 알려주세요. 

- Spring 의 장점이 어떤게 있다고 생각하시나요?

- Srping 의 단점은 어떤게 있다고 생각하시나요?

- VO, DAO 왜 사용한다고 생각하시나요? 

 

 

 

기타 

- 알고있는 디자인 패턴에 대해 알려주세요, 

- 싱글톤이라는게 어떤건지 자세히 설명 부탁드려요. 어떤 프로젝트에서 어떻게 사용했나요?

- 팩토리패턴이라고 들어보셨나요? 있다면 간결하게 코드 작성 부탁드립니다.

  ( 문법이 틀리는건 상관없으니 패턴을 볼수 있도록 간단하게 작성 부탁드려요)

- Rest API에 대해 설명해주세요. 

- Rest API 구축해본 경험이 있나요? 있다면 설명해주세요.

- 복잡한 형태의 프로세스를 구현해야한다고 할때 어떤식으로 시작하고 진행하는지 본인의 작업 방식을 설명해주세요.

- 객체지향 5대 원리 SOLID 라고 들어보셨나요? 설명 부탁드려요,

  들어보지 못했다면 약자를 가지고 유추해서 이야기해주세요. 

- 암호화 방식은 여러개가 있는데 혹시 설명 가능하신가요? 언제 사용하셨나요?

- 대칭키, 공개키, 해쉬 여러개의 방식이 있는데 각각의 특징과 장단점에 대해 설명해주세요.

- 관심있는 신기술이 있나요?

- 어떤 개발자가 되고 싶으신가요?

- 앞으로 미래를 위해 어떤 계획을 갖고 계신가요?

- was와 webservice 의 차이점에 대해 설명해주세요. 

- 개발자로서의 본인의 장점을 이야기해주세요.

 

 

OS 

- 리눅스를 사용해본 경험이 있나요?

- 웹서버 관리는 어떤식으로 하셨나요? 

- 리눅스는 어떤 종류를 사용하셨나요?

- kill 명령어에 대해 설명해주세요, 사용했던 경험도 이야기해주세요. 

- 600 권한은 어떤 권한인지 설명해주세요. 

- 로그관리는 어떻게 했나요? 

 

 

 

Database 

- 사용해본 DB에 대해 설명해주세요.

- Index에 대해 설명 부탁드려요. 왜 사용하는지도 함께 설명해주세요.

- Index을 설정할 때 어떤 점을 고려해야한다고 생각하시나요?

- where 절에 Index 사용이 가능한가요 ? 

- 반드시 index가 where 절에 들어가야한다고 생각하시나요?

- index 사용에 주의해야하는 경우에 대해 설명해주세요

- index가 사용되었는지 안되었는지 어떻게 알 수 있나요?

- 쿼리를 직접 작성하거나 쿼리 튜닝 경험이 있으신가요?

- 가장 많이 했던 테이블 Join이 있다면 몇개의 테이블 정도를 사용했나요?

- 회원관리 프로세스를 구현한다고 했을때 어떻게 테이블 구조를 생성할지 이야기해주세요.

- 본인이 설계했던 DB 구조에 대해 설명해주세요.

- 사용했던 엔티티는 몇개나 되었나요?

- Erd는 어떤 프로그램을 사용했나요? 어떤식으로 그리는지 알려주세요. 

- isolation level에 대해 설명해주세요. 

- 데이터를 관리할때 암호화 한다던지 본인이 데이터를 보호하기 위해 사용했던 기술이나 방식에 대해 이야기해주세요.

 

 

지난 프로젝트 경험 

- 본인의 포지션은 어떤 쪽이었나요?

- 업무 배분은 어떤 단위로 배분되었나요? backend, front 

- 본인은 여러개의 포지션중 어떤 포지션에 가장 관심이 있나요?

- 가장 난이도 있었던 프로젝트를 설명해주세요. 그 안에서의 본인의 역할과 기여도를 말해주세요.

- 트래픽의 발생으로 인한 이슈 경험이 있나요? 있다면 어떻게 대처했나요? 

- 본인의 기여도가 가장 높았던 프로젝트를 설명과 본인의 역할에 대해 이야기해주세요.

- 본인이 겪었던 가장 큰 이슈는 어떤게 있었나요? 상황과 해결했던 내용들을 들려주세요.  

- 로그관리는 어떤식으로 하셨나요?

- 에러가 발생한다면 어떤식으로 대처하셨나요? 에러가 났다고 생각하고 해결 순서를 알려주세요.

 

 

 

'Java' 카테고리의 다른 글

Client IP 가져오기  (0) 2020.08.19
File 정리  (0) 2020.08.18
JAVA 언어의 장단점  (0) 2020.07.13
JVM 그것이 알고싶다.  (0) 2020.07.12
String Pool 이란 무엇일까? String에 대한 고찰  (0) 2020.07.12

# 장점

1. 운영체제에 독립적이다. 

- JAVA는 JVM을 통해 동작하기 때문에 특정 운영체제에 종속되지 않는다.

 

2. 객체지향언어이다.

- 객체지향적으로 프로그래밍을 하기 위한 여러 지원을 하고있다. 

> 캡슐화, 다형성, 상속, 추상 등등.. 

 

3. 메모리 관리가 자동으로 이루어진다. 

- JVM 내에 GC (Garbage Collector)라고 불리는 스레드에 의해 메모리 관리가 자동으로 이루어져

  비즈니스 로직에 집중할 수 있다. 

 

4. 멀티 스레드를 쉽게 구현 가능하다.

- 자바 API는 스레스 생성 및 제어와 관련된 기능을 제공한다. 

  고로 실행되는 운영체제에 상관없이 멀티 스레드의 구현이 편리하다.

 

5. 동적로딩(Dynamic Loading)을 지원한다. 

- 어플리케이션이 실행될 때 모든 객체가 생성되지 않고 필요한 시점에 생성한다. 

  클래스를 수정하는 경우 해당 클래스만 다시 컴파일하기 때문에 유지보수가 쉽고 빠르다. 

 

# 단점 

 - 비교적 속도가 느리다. 

 자바는 모든 코드가 한번에 모든 코드가 컴파일 되지 않고 실행단위로 컴파일이 이루어진다. 

 고로 다른 언어에 비해 속도가 느리다. 하지만 요즘엔 JIT 컴파일러 같은 기술 적용으로 JVM 기능이 향상되어 

 속도 격차가 많이 줄었다. 

 

- 예외처리가 불편하다. 

프로그래머 검사가 필요한 예외가 등장한다면 무조건 프로그래머가 선언을 해주어야한다. 

 

 

 

참고 -- 

http://yolojeb.tistory.com/17

 

 

 

+ Recent posts