본문 바로가기

language/자바

(18)
[java] 상속에서 조심해야 하는 점 상속이 무엇인지는 다른 기술 블로그에도 많기 때문에 간단한건 넘어가고 설명을 한다. 우리는 객체지향프로그래밍을 하고있기때문에 선언을 할때 상위 = new 하위(); 이런 것의 장점을 알아야한다. . 사용하는 ArrayList도 선언할때 다음과 같은 형태로 작성하는 것이 좋다. List list1 = new ArrayList(); List list2 = new LinkedList(); 여기서 조심해야할 점 !!! 다음을 예로 들어보자 Animal 이라는 상위 클래스가 있고 Wolf 와 dog라는 하위 클래스가 있다. 각각 클래스는 Animal을 상속받는다. class Animal{ void bark(){ System.out.println("짖다!"); } } class Wolf extends Animal{..
[java]static의 사용이유 static은 자바 main 문이 있는곳이라면 아주 쉽게 봤다 처음배울때는 그냥 기계적으로 계속썼다 public class Main public static void main ... static을 왜쓸까? 두가지 이유가있다. 자주쓰기위해, 어쩔수없이 1. 자주쓰는것, 공용으로 쓰는것을 여러곳에서 사용하기위해 ( 전역변수느낌?) static 붙이면 new(생성자) 없이 사용이 가능하다. 이말이 무슨소린지 몰라도 아래 코드를 보면 이해가간다. (int)(math.random()*10); Integer.parseInt(asd); 우리가 자주쓰는 모습이다. Math asd = new Math() 이런식으로 math에 대한 객체를 생성하지 않고 가져다 쓴다. 만약 한다면 Math asd = new Math() a..
getter와 setter getter와 setter를 왜 쓰는걸까? 이유는 외부에서 제한없이 접근하는 것을 방지하는 것이다. (캡슐화, 객체무결성...) 정확히 말하자면 private 접근제한자로 아무나 접근을 못하게하고 getter와 setter로 접근하는 것! global(전역 변수)를 좋아하지 않는 이유와 마찬가지이다. 어디서든 접근 가능하다는 것 = 해당 변수를 어디서든 바꿀수있다는것. = 신뢰성을 하락한다는 것 setter는 외부의 접근을 최소화하여 값을 함부로 못바꾸게해 그러면 getter는 굳이 접근을 막을 필요가 있을까? 단순히 값을 읽기만 하는거잖아? 이거에 대한 답변은 일부만 보여주려고 라고 할수 있을것이다. 가령 다음과 같은 class가 있다고 하자 이름과 번호만 알고싶어도 아래와 같이 다 뜨게된다 많으면 많..
자바 HttpServletRequest HttpServletRequest 이러한 URL이있다하자 URL : http://127.0.0.1:8080/contextpath/servletpath/index.jsp?type=post getRequestURL() : http://127.0.0.1:8080/contextpath/servlcetpath/index.jsp getRequestURI() : /contextpath/servletpath/index.jsp - 프로젝트이름 + 파일경로 getServletPath() : /servletpath/index.jsp getContextPath() : /contextpath - 프로젝트이름 getQueryString() : type=post - '?' 다음 내용이다. getServerName() : 127.0..
자바 Integer.parseInt() 진수 표현 문자열을 숫자로 바꾸는 메소드 parseInt 진수변환때 너무 헷갈리더라 String a =1000; int b= Integer.parseInt(a, 3); // 3진수인 a를 10진수로 int c= Integer.parseInt(a, 16); //16진수인 a를 10진수로 int c= Integer.parseInt(a); //10진수인 a를 10진수로 ​기본이 10진수라 a,10 안 적어도 됩니다 ​ ※주의※ 문자열 a를 몇진법으로 받아드릴지 정하는거기에 3진수로 받을건데 a에 3보다 큰값이 오면 NumberFormatException 예외발생
자바 2진수 앞에 0 출력 14를 2진수로 나타내면 1110이다 int num = 14; String a = Integer.toBinaryString(num); // 1110 내가 원하는건 01110 이다 String.format()을 이용하자! 답부터 적으면 String b = String.format("%05d", Integer.parseInt(Integer.toBinaryString(14))); System.out.print(b); // 01110 왜이렇게 되는걸까? ​ 우선 format의 앞에 파라미터를 확인하자 ​ %d -정수 %f -실수 %s -문자열 ​ %5d - 5자리 표현 -> 뒤에값이 5자리 미만이라면 공백으로표시 ​ %05d - 공백대신 0으로 표시 ​ ​ ​ ​ 이제 앞에 파라미터는 이해가 되었을 것이다. ​..
자바 String, StringBuffer, StringBuilder 결론부터 말하자면​ 문자열을 수정하는 상황이라면 StringBuffer, StringBuilder 멀티스레드 사용하면 StringBuffer 싱글스레드 사용하면 StringBuilder 아니면 String 이 클래스들의 차이 String은 불변 (immutable) StringBuffer, StringBuilder은 가변 (mutable) ​ ​ String 메모리가 불변이면... String str = "a"; str = str + "b"; str = str.concat("c"); '+' 연산자나 concat 메소드를 하게되면 메모리에서는 다음과 같은 상황이 벌어진다. ​ 기존에 있던것에 추가 하는것이아니라 메모리손해 ​ ​ ​ ​ StringBuffer VS StringBuilder 사용 방법, 메소..
자바 Scanner nextLine 오류 buffer Scanner sc = new Scanner(System.in); int a = sc.nextInt(); String b = sc.nextLine(); 이렇게 코드를 짜면 제대로 작동 하지않는다. 이유는 이렇다 a에 10을 입력하고 enter를 누르면 enter 값까지 같이 넘어간다. 즉, enter(\n)값이 들어간다. 10\n 이런식이다. 그런데 nextInt()에는 \n을 알아서 제외하고 값을 받아 \n의 입력은 다음으로 넘어간다. 그 넘어간 값이 String b에 자동으로 들어가면서 내가 b를 직접 입력도 전에 코드는 넘어가버린다. 해결책 1 : 버퍼를 넣는다! Scanner sc = new Scanner(System.in); int a = sc.nextInt(); String buffer = s..