자바 23

[Intellij] Intellij에서 자바 바이트코드 확인하기 (Maven 사용시)

자바 바이트코드를 확인할 일이 있어서 터미널에서 javap옵션을 사용해서 보려고 했는데 javap 가 없다고 뜨길래 한참을 헤맸다. 아마 경로가 틀린것 같은데 오전내로 당장 급하게 제출해야해서 그냥 인텔리제이에서 확인하기로 했다. 인텔리제이에서 자바 바이트코드를 확인하는 방법은 간단하다. (Maven을 사용한다고 가정 ) 메이븐을 사용하는 환경에서 컴파일을 하게 되면 왼쪽에 프로젝트 창에 target이라는 폴더가 있을 것이다. (test폴더 밑에 있음!!) 그럼 거길 들어가면 classes라는 폴더가 있을텐데 그안에 본인이 컴파일한 .class 파일이 있을 것이다. 뭔가 좀 달라 보이는데 자바 코드로 되어있다. 그런데 조금은 다르다. 생성자도 만들어놨거나 그런식으로 다르다. 그리고 편집도 안된다. 이제 ..

2021.09.10

Java vs Python3 vs C++ for coding test

아래 두 코드는 같은 문제를 자바와 파이썬으로 각각 풀어낸 것이다. (오랜만에 풀어봤다.) 이분탐색문제였는데, 이 문제 뿐만 아니라 다른 문제들도 마찬가지로 작성해야할 코드의 양에 있어서 상당한 차이를 보였다. 자신이 가장 편한 언어를 선택하라고 해서 사실 c++과 파이썬, java중 어느 것을 선택하더라도 별 반 차이가 없는 상태에서 시작했었다. 당시에는 숙련도가 모두 비슷했었다. (c++ stl의 사용법을 100프로 알고있던 상태는 아니어서 c++의 경우 숙련도가 조금은 떨어지긴 했다.) 주로 사용하는 언어가 자바여서 자바로 주로 풀이하였는데, 한 문제를 풀면서 python으로도 똑같이 풀어보는 방식으로 진행했다. 한문제를 여러언어로 바꿔서 풀어본적이 대부분이었는데, 여지껏 문제를 풀면서 느낀 점이 ..

[JSTL] JSTL의 SQL사용 columnNames와 rows 의 사용

JSTL에서 SQL 문을 사용하는 예제를 작성하던 도중에 본적이 없는 구문을 찾았다. 그래서 어떻게 동작하는지 궁금해서 찾아보았다. 위에 보면 알겠지만 10번째와 15번째에 columnNames와 rows 로 접근하여 열과 행의 정보를 가져온다. 그런데 이게 어떻게 이런게 열과 행의 정보를 가져오는지가 이해가 안됬다. 설명도 없을 뿐더러 저장되어있는 필드 변수의 값을 가져오는건지 아니면 메소드를 사용해서 가져오는건지 잘 이해가 안됬다. (애초에 사실 ${} 표현에 대한 이해가 조금 부족했던 것 같다. 그래서 이해가 안된거지) 그래서 일단은 저기에 쓰인 rs 참조변수가 ResultSet 타입이어서 java api 문서에서 ResultSet파트에서 메소드를 다 봤는데, 없었다. 근데 이게 접근법이 잘못된거였..

Servlet & Jsp 2021.01.18

[JSP] jsp - jdbc프로그래밍 - 톰캣과 오라클 포트번호 충돌했을 때

무난히 jsp 를 작성하고 있는 중이었는데. (jdbc관련) 갑자기 이클립스에서 서버를 구동시키자 8080포트가 이미 사용중이라는 경고창이 출력되었다. 문득 생각해보니 그 이전에 바로 oracle database 11 EE를 다운받아서 실행시켜놨던게 생각이 났다. 검색해보니 오라클db와 톰캣 모두 8080포트를 사용하기 때문에 충돌이 나는 사람들의 사례가 많았다. 대충 확인하는 과정과 해결한 과정을 보여주면 다음과 같다. 우선 오라클 db과 충돌이 난게 확실한지 확인하기 위해서 cmd에서 netstat -a -n -o -p tcp 라고 쳐준다. 그러면 프로토콜, 로컬주소, 외부주소, 상태 ,PID 순으로 쭉~~~ 뜰텐데 그중에서 호트가 8080으로 지정된걸 찾아낸다. 그리고 여기서 PID를 확인한다. 확..

Servlet & Jsp 2021.01.14

[Java] 자바 클래스 로딩 절차

클래스 로딩 절차 1) JRE 라이브러리 폴더에서 클래스를 찾는다. 2) 없으면, CLASSPATH 환경 변수에 지정된 폴더에서 클래스를 찾는다. 3) 찾았으면, 그 클래스 파일이 올바른 바이트코드인지 검증한다. 4) 올바른 바이트코드라면, Method Area 영역으로 파일을 로딩한다. 5) 클래스 블록이 있으면 순서대로 그 블록을 실행한다. 6) 클래스 안에 static block (스태틱 블록)들이 있으면 순서대로 그 블록을 실행한다.

Java lang 2021.01.06

[디자인패턴] 헤드퍼스트 디자인패턴 - 스트래티지 패턴

객체지향의 기초에는 추상화 캡슐화 다형성 상속 이 존재한다. 객체지향의 원칙에는 바뀌는 부분은 캡슐화한다. 상속보다는 구성을 활용한다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 가 있다. 객체지향 패턴 중 스트레티지 패턴은 알고리즘군을 정의하고 각각을 캡슐화하여 바꿔 쓸 수 있게 만든다. 스트패티지 패턴을 이용하면 알고리즘을 활용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 교재에서 활용한 예제는 다음과 같다. public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public Duck(){} public abstract void display(); public void performFly() ..

Java lang 2021.01.04

[Java] Junit과 테스트 주도 개발(TDD) 그리고 리팩토링

Junit 공식 사이트 https://junit.org/junit5/ Junit이란? 자바의 단위 테스트 프레임워크 https://nesoy.github.io/articles/2017-02/JUnit http://www.nextree.co.kr/p11104/ http://junit.sourceforge.net/javadoc/org/junit/Assert.html Junit과 테스트 주도 개발 방법론 (TDD) https://galid1.tistory.com/329?category=763585 https://galid1.tistory.com/783?category=763585 TDD의 개념적 원칙 (FIRST 원칙 ) https://galid1.tistory.com/783?category=763585 TD..

Java lang 2021.01.04

[Java] 자바 방어적 복사와 불변객체 생성

자바에서 등장하는 방어적 복사와 불변객체 생성에 대한 내용을 알아보도록 하자. 용어가 어렵지만 사실 내용은 그다지 어려운 내용은 아니다. 방어적 복사는 즉 매개변수의 유효성을 검사하기 전에 방어적 복사본을 만들고, 이 복사본으로 유효성을 검사한 점에 주목하자. 순서가 부자연스러워 보이겠지만 반드시 이렇게 작성해야 한다. 멀티스레딩 환경이라면 원본 객체의 유효성을 검사한 후 복사본을 만드는 그 찰나의 취약한 순간에 다른 스레드가 원본 객체를 수정할 위험이 있기 때문이다. 방어적 복사를 매개변수 유효성 검사 전에 수행하면 이런 위험에서 해방될 수 있다. 컴퓨터 보안 커뮤니티에서는 이를 검사시점/사용시점(time of check/time of use) 공격 혹은 영어 표기를 줄여서 TOCTOU 공격이라 한다...

Java lang 2021.01.04

[Java] 객체지향 디자인패턴

dailyheumsi.tistory.com/148?category=855210 [디자인 패턴 1편]. 디자인 패턴 개요 1. 디자인 패턴이란 디자인 패턴은 소프트웨어 공학론 안의 좋은 코드를 설계하기 위한 일종의 설계 디자인 방법론이다. 그렇다면 좋은 코드란 무엇인가? 좋은 코드란, 가독성, 간결함 등 여러 dailyheumsi.tistory.com 1편부터 시작해서 정말 잘 나와있다. SOLID 원칙이라는걸 블로그 돌아다니다가 간간히 보기만 했었는데, 이게 객체지향의 5대원칙이라니... 이런것도 모르고 상속,캡슐화,다형성만 알면 끝이라고 생각했다니... 디자인 패턴이 잘 설명되어 있다. jdm.kr/blog/235 프록시 패턴(Proxy Pattern) :: JDM's ..

Java lang 2021.01.02
반응형