자바 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 2021.01.06

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

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

Java 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 2021.01.04

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

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

Java 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 2021.01.02

[Java] 자바 리플렉션 - java Reflection이란?

책에서는 리플렉션을 잘 다루지 않는다. 사실 어느 경우에 사용하는지 아직 감도 안잡힌다. 간단하게 짚고 넘어가자. 대표적으로 스프링, 하이버네이트 등에서 Reflection을 사용한다고 한다. Reflection은 클래스의 구조를 개발자가 확인할 수 있고 값을 가져오거나 메소드를 호출하는데 사용할 수 있다고 한다. Reflection을 확인하기 좋은 예제를 하나 소개하겠다. 아래는 코딩테스트를 준비하면서 사용한 코드이다. 적절한 입력을 받고 이를 처리하는 코드인데 이에 대해서 main의 코드 맨 마지막에서 Reflection을 사용해서 직접 값을 출력해보았다. package 문제풀이.BOJ.문자열.구현; import java.io.BufferedReader; import java.io.InputStrea..

Java 2021.01.02

[이것이 자바다] 자바 네트워크2 공부 정리

이번 장은 자바 멀티플렉싱 서버와도 관련이 있다. NIO를 다루기 때문이다. 블로그들을 찾아보다가 NIO에 대해서 아주 잘 설명해주는 사이트들을 찾았다. jongmin92.github.io/2019/03/03/Java/java-nio/ Java NIO와 멀티플렉싱 기반의 다중 접속 서버 자바 NIO에 대한 소개와 NIO와 함께 도입된 자바에서 I/O 멀티플렉싱(multiplexing)을 구현한 selector에 대해 알아봅니다. I/O 멀티플렉싱(multiplexing)에 대한 개념에 대해 아직 잘 이해하지 못하고 있다면 jongmin92.github.io 이 블로그에서 기초적인 내용을 얻어낼 수 있었다. 링크된 사이트들이 몇 있던데, tutorials.jenkov.com/ Jenkov.com Threa..

Java 2021.01.01

[이것이 자바다] 자바 NIO 공부 정리

path package sec02.exam01_path; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Iterator; public class PathExample { public static void main(String[] args) { Path path = Paths.get("src/sec02/exam01_path/PathExample.java"); System.out.println("[파일명]"+ path.getFileName()); //파일명 얻기 System.out.println("[부모 디렉토리명]" + path.getParent().getFileName());//getParent하면 부모 디렉토리의 Path..

Java 2020.12.30

[이것이 자바다] 자바 네트워크1 공부 정리

이번 장을 공부할 때 예제에 FX가 쓰여서 FX 설치를 해주는데, 좀 문제가 생겨서 꽤나 애를 먹었다. 친구 말로는 버전? 이 차이가 나면 그럴 수 있다는데, 확실한건 그냥 마켓에서 다운받고 재시작하는 걸로는 사용할 수 가 없었다. 그런 증상이 나타나는 사람이 많은 것 같았다. 어느 블로그에 나온대로 하니 실행은 되었지만, 매번 프로젝트를 만들때마다 이렇게 해야 하나? 싶을정도로 귀찮은 과정이었다. 해당블로그는 다음과 같다. we-always-fight-with-code.tistory.com/36 JavaFX 설치와 이클립스 연동 JavaFX를 실행하기 위해서 뭐 이클립스 네온버전을 설치하라 어쩌고 하는데 하...깔기 싫어서 기존에 쓰던 오픈버전으로 세팅했다. 대신 세팅하는데 좀 애먹었다. ㅎㅛㅎ... ..

Java 2020.12.27

[이것이 자바다] 자바 스트림 공부 정리

stream_introduction package sec01.stream_introduction; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Stream; public class IteratorVsStreamExample { public static void main(String[] args) { List list = Arrays.asList("홍길동","신용권","감자바"); //자바 7이전에서 사용한 Iterator 이용하기 Iterator iterator = list.iterator(); while(iterator.hasNext()) { String name = it..

Java 2020.12.24

[이것이 자바다] 자바 람다식 공부 정리

no_argument_no_return package sec03.exam01_no_argument_no_return; @FunctionalInterface //메소드가 하나인지 체크함. public interface MyFunctionalInterface { //함수적 인터페이스 -> 람다식으로 표현 가능 . public void method(); } package sec03.exam01_no_argument_no_return; public class MyFunctionalInterfaceExample { public static void main(String[] args) { MyFunctionalInterface fi; fi = () -> { String str = "method call1"; Sys..

Java 2020.12.22

[Java] 자바 네트워킹 socket 기본 코드 - Server/Client code

클라이언트쪽 기본 코드 간단한 기본 예제이다. package sec07_exam02_data_read_write; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; public class ClientExample { public static void main(String[] args) { Socket socket = null; try { socket = new Socket(); System.out.println("[연결 요청]"); socket.connect(new InetSocketAddress("..

Java 2020.12.18

[Java] JVM의 메모리구조(가비지 컬렉션)/ 자바 메모리 구조

shs2810.tistory.com/5?category=670113 가비지 컬렉션(Garbage Collection)??? 자바 공부하면서, 앞에서도 메모리 구조 정리하면서 가비지, 가비지 이야기가 많은데,, 정확히 어떤 동작을 하는지, 어떤 것을 처리하는지 몰라서 찾아보았습니다. 1. 가비지 컬렉션 (Garbage Collec shs2810.tistory.com shs2810.tistory.com/4?category=670113 JVM 메모리 구조 JVM 메모리 구조는 어떤가... 1. JVM 메모리 구조 Method Area Heap Stack PC 레지스터 Native Method Stacks 1. Permanent Generation 2. New / Young Generation 3. Old Ge..

Java 2020.12.17

힙정렬 코드

자료구조와 알고리즘 입문 - 자바편에 힙정렬이 나왔다. 하노이의 탑도 이해가 잘안갔고, 특히 재귀적 호출이 너무 복잡했다. 그래서 일부는 직접 그림판에 그림을 그려서 영상으로 찍어서 내가 하는말을 들어가면서 이해했는데, 글쎄,,, 힙정렬이 좀 이해가 잘안간다. 이해가 안가는건 일단 외우라고 했으니... 일단은 외워야 겠지... 이게 안좋은 방법인건 알고 있다. 근데 일단은 머릿속에 집어넣고 그 다음에 이해해야겠다. package algorithm; public class heap { private void solve() { int[] array = {230,10,60,550,40,220,20}; heapSort(array); for(int v:array) { System.out.println(v); } ..

[Java] Java 꿀팁모음

자바에서는 문자를 비교할 때 ==을 쓰면 주소를 비교하지만 mysql 다운받을때 mysql for excel을 체크해서 다운받아야만 엑셀 파일 읽을 수가 있다. JDBC 프로그래밍 WITH MYSQL 2020.11.06 자바 jdbc프로그래밍할때 mysql 연동해주는데. mysql 한동안 사용안하다가 사용하니까 연결할 수 없음. cannot connect to server가 떴음. 그냥 서비스에서 mysql80 다시 시작하기 눌러도 서비스 재시작할 수 없음이라고 뜸. 인터넷에 검색하니까. 이게 mysql 프로세스를 강제종료를 자주 했을때 발생하는 현상이라고 함. 혹은 이 문제이거나 아니면 my.ini 파일이 손상되었을때 발생한다고 함. my.ini 파일과 관련된 해결방법은 1. my.ini파일이 utf-..

Java 2020.11.19
반응형