목록JAVA (25)
공부한것들을 정리하는 블로그 입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
NullPointerException 을 고려하자 String 생성할 때 new 키워드를 사용하지 말자 반복문 내에서 새로운 객체를 생성하지 말자 Collections 을 반복하는 동안 수정하지 말자 Switch-Case 문에서 break 키워드를 뺴먹지 말자 객체 비교 "==" 와 "eqauls()" 의 차이를 알자 무작정 StringBuffer 를 사용하지 말자 Java 파일 작성 시 표준 Java 코드를 짤 때 주의할 점 몇가지 (tistory.com) Java 코드를 짤 때 주의할 점 몇가지 Overview Java Coding Best Practices And Standards 에 있는 글을 번역한 글입니다. 여러 개의 항목이 있었는데, 그 중에서 제가 개발하면서 공감되었던 부분들만 간단하게 정..
1. List 2개 합치기 1. List.addAll() 2. Collections.addAll() 3. Stream.of() + flatMap() + collect() https://hianna.tistory.com/560
1. IntelliJ 프로젝트 한글 깨짐 해결방법 : - File > Project Settings > Project 항목 SDK / language level 변경 (language level이 너무 높은경우 oracle/intelliJ 한글지원 x) 2. 프로젝트 VM 한글 깨짐 해결방법 : - Help > VM option > encoding 설정 2개 추가 -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 3. 콘솔/터미널 한글 깨짐 해결방법 : - File > Settings > Gradle > using 항목 2개를 모두 IntelliJ IDEA로 변경 4. 콘솔/터미널 명령어를 통한 실행(컴파일) 한글깨짐 ex) ./gradlew test 명령어를 통해 gr..
보호되어 있는 글입니다.
20장 java.lang 에러 : java.lang 패키지의 클래스/인터페이스/예외 및 에러 객체의 출력 : toString() 보다는 valudOf()가 안정적이다 Q.같은 패키지에 있는 클래스를 제외하고, 별도로 import 하지 않아도 되는 패키지는 무엇인가요? * A.java.lang Q.자바의 메모리가 부족해서 발생하는 에러는 무엇인가요? * A.OutOfMemoryError Q.메소드 호출관계가 너무 많아서 발생하는 에러는 무엇인가요? * A.StackOverflowError Q.java.lang 패키지에 선언되어 있는 3개의 어노테이션에는 어떤 것들이 있고, 각각의 역할은? * A.Deprecated, Override, SuppressWarning Q.Double과 Integer 같은 숫자 ..
19장 JVM JVM - 우리가 작성한 자바 프로그램이 수행되는 프로세스 - java 라는 명령어를 통해 애플리케이션이 수행되면, 이 JVM 위에서 애플리케이션이 동작한다 - 이 JVM에서 우리가 작성한 프로그램을 찾고 실행하는 일련의 작업이 진행된다 자바의 메모리관리 - 개발자가 하지 않아도 된다 - JVM 이 알아서 한다 (JVM의 GC가) - GC가 알아서 청소해준다고 하더라도, 메모리를 효율적으로 사용하도록 개발하는ㄱ ㅓㅅ은 중요 GC - Young 영역, Old 영역, Perm 영역(Meta Space) 자바에서 메모리가 살아가는 과정 - Eden 영역에서 객체가 생성 - Eden이 가득차면 살아있는 객체인 Survivor 영역으로 복사 후, Eden 영역을 다시 채운다 - Survivor 영역..
https://heepie.me/m/32 [2017.08.21] 12. 왜 Enum을 사용할까? Enum은 Enumerated Type으로 '서로 연관된 상수 값들의 집합'이다. (cf. 배열은 서로 연관된 변수 값들의 집합 / 왜 배열을 사용할까? - http://heepie.tistory.com/2) Enum의 등장 배경 1. 복잡한 값 -> 단순한.. heepie.me
오랜만에 String, StringBuffer, StringBuilder 차이점에 대해 리마인드 해봅니다. String, StringBuffer, StringBuilder 차이점 # String - 가장 큰 차이는 String은 불변성을 가진다는 점입니다. - 가령 "hello" 값을 가지고 있던 String 클래스의 참조변수에 "World" 문자열을 더하게 될 경우 단순히 문자열이 "helloWorld"로 수정된 것이 아니라, - 기존에 "hello" 값이 들어가 있던 String 클래스의 참조변수가 "helloWorld"라는 값을 가지고 있는 새로운 메모리 영역을 가리키도록 변경되고, 처음 선언했던 "hello"로 값이 할당되어 있던 메모리 영역은 GC에 의해 제거 대상이 됩니다. - 이처럼 Stri..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
JVM의 특징 1. 스택기반의 VM 2. OS와 JAVA 사이에서 중계자 역할을 함으로써, JAVA가 OS에 구애받지 않도록 함 3. 메모리관리, GC를 수행 자바 프로그램 실행 과정 1. 애플리케이션이 실행되면 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다. 2. 자바소스(.JAVA)를 자바 컴파일러(javac)가 자바 바이트코드(.CALSS)로 변환한다. JVM에서 자바 바이트코드를 Class Loader를 통해 로딩한다. 3. JVM에서 자바 바이트코드에 대해 검증/재해석/바이너리 코드로 변경 작업을 수행한다. 4. 이후 런타임 과정에서의 수행과정 1) 클래스들의 static 변수를 자동 초기화..
클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 • SRP: 단일 책임 원칙(single responsibility principle) • OCP: 개방-폐쇄 원칙 (Open/closed principle) • LSP: 리스코프 치환 원칙 (Liskov substitution principle) • ISP: 인터페이스 분리 원칙 (Interface segregation principle) • DIP: 의존관계 역전 원칙 (Dependency inversion principle 1. SRP 단일 책임 원칙 Single responsibility principle • 한 클래스는 하나의 책임만 가져야 한다. • 하나의 책임이라는 것은 모호하다. • 클 수 있고, 작을 수 있다. •..
우리가 작성하는 모든 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스이다. 라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메소드를 설계하는 것이 바람직하다. 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나, 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 그리고 특정 메소드를 호출할 수 없도록 제한할 필요가 있다. 자바는 이러한 기능을 구현하기 위해 접근 제한자를 제공하고 있다. * 객체생성 member input = new member(); member output = null; 1. new 연산자가 호출되면 생성될 객체(input)의 메모리가 할당된다. 2. 생성자가 생..
싱글톤(Singleton) 디자인패턴 이란? 가끔 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤(Singleton)이라고 한다. 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다. 생성자를 호출한 만큼 객체가 생성되기 때문이다. 생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 된다. 그리고 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화한다. 이때 정적 필드도 private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 막는다. 대신 외부에서 호출할 수 있는 정적 메소드인 getInstance()를 선언하고 정적 필드에서..
** gmail로 email을 인증하는 여러가지 경우를 모두 다루어보기 위해 포스팅하였습니다. (smtp) 1. 사전작업 - 구글 보안정책 : 구글 보안정책 관련하여 본인의 이메일 계정에 대해 몇가지 조치가 필요합니다. - POP/IMAP 활성화 - 2단계 인증 활성화 (이건 안해도 됬던걸로 기억합니다. 그냥 보안절차상 넣었습니다.) - 계정에 대한 "보안수준이 낮은 앱의 액세스를 허용" 하고, 실습종료 후 원복 (다시 비허용)2. 스프링부트에서 gmail인증 api 사용법 (내장톰캣 사용 - 톰캣 다운로드 필요x) - 설정파일(properties 파일)을 통한 사용3. SpringMVC에서 gmail인증 api 사용법 - 설정파일(xml 파일)을 통한 사용4. JSP에서 gmail인증 api 사용법 1..
추상클래스와 인터페이스의 차이 공통점 추상 메소드를 1개이상 가지고 있다. 차이점 인터페이스는 인스턴스 변수를 가질 수 없다. 추상클래스 - 미완성 설계도에 비유 - 추상메소드를 포함하고 있다는 것을 제외하고는 일반클래스와 같다. - 추상메소드를 1개이상 포함하는 클래스는 반드시 추상클래스여야 한다. - 추상메소드가 0개여도 추상클래스로 지정할 수 있다. - 인터페이스를 상속받은 구현체가 메소드들 중 일부만 구현할 경우, 클래스 앞에 abstract를 붙여야만 함(추상클래스) - 인스턴스(객체)를 만들 수 없는 클래스이다. - 상속을 통해서 하위클래스에 의해서만 완성된다. - 하위클래스에서 메소드의 구현을 강제해야 한다.(재사용과 확장) - 객체지향의 상속은 재사용과 확장의 개념 (상위클래스로 갈수록 추..
문자열의 길이 : 변수명.length(); String str = "hello";int len1 = str.length(); System.out.println(len1);-> 5 배열의 길이 : 배열명.length Object[] arr = new Object[3];int len2 = arr.length; System.out.println(len2);-> 3 ()가 있고, 없고의 차이가...
요약 : 종류 클래스 하위 클래스 동일 패키지 모든 클래스 private O X X X (default) O X O X protected O O O X public O O O O - private 자기 자신 클래스 내에서만 이용할 수 있는 멤버를 선언할 때 사용. - (default) 동일 패키지에 속하는 클래스만 접근할 수 있는 멤버. - protected 동일 패키지와 동일 패키지에 포함되지는 않지만 하위 클래스 관계에 있는 클래스도 접근 가능. - public 모든 클래스에 의해 접근할 수 있다. 즉, 접근 제약이 없다. 위의 modifier(제어자)는 변수의 선언, 생성자, 메소드 모두에 공통으로 적용된다. 변수나 메소드를 선언할 때 접근을 제어할 수 있는 modifier를 설정할 수 있다. 이러..