자바 36

Java | 접근 지정자 (Access Modifier)

클래스의 멤버 각각에 외부에서 접근할 수 있는 범위를 지정 1. public (+) 공개 정도가 가장 높고 어디에서든 자유롭게 접근할 수 있다. 2. protected (#) 같은 패키지 내에서 접근이 가능하고 다른 패키지라도 상속 받은 클래스 내부에서는 사용 가능. 3. default (~) 같은 패키지 내에서만 접근이 가능하다. 아무런 접근 지정자도 없을 경우 자동으로 적용된다. 4. private (-) 동일 클래스 내에서만 접근이 가능한 가장 낮은 단계의 자유도를 갖는다.

개발_웹/Java 2021.05.19

Java | 예외 처리의 3가지 방식

참고 2019.05.09 - [IT&프로그래밍/Java] - Java | 예외 처리 (try-catch, throw, throws) Java | 예외 처리 (try-catch, throw, throws) try-catch문 프로그램의 실행 중에 비정상적인 상황이 발생할 경우에는 실행이 중지되고, Exception 객체나 Error 객체가 생성됩니다. try-catch문은 예외(non runtime exception)가 발생할 수 있는 코드를 처리 zuyo.tistory.com 예외 처리의 3가지 방식 예외복구 (재시도) 예외회피 (throws) 예외전환 예외복구 (재시도) public void sampleMethod() { int maxRetry = 10; // 재시도 횟수 10회 while (maxRe..

개발_웹/Java 2021.05.15

Java | 업캐스팅, 다운캐스팅, instanceof

업캐스팅 서브클래스 객체를 슈퍼클래스 타입으로 변환하는 것. Person person = new Student(); List list = new ArrayList(); 자식클래스는 부모클래스를 내포하고 있기 때문에 부모클래스 객체에 넣을 수 있다. 이를 업캐스팅이라 한다. 업캐스팅을 하면 자식클래스의 멤버는 접근이 불가해지고, 부모클래스의 멤버만 사용할 수 있게 된다. 그러나 자식클래스가 부모클래스의 메소드가 오버라이딩 했다면, 오버라이딩된 자식클래스의 메소드가 호출이 된다. class Person { // 슈퍼클래스 String name; String id; public Person(String name) { this.name = name; } } class Student extends Person {..

개발_웹/Java 2021.05.11

Java | 배열 (1차원 배열, 다차원 배열, 배열 복사, 배열 정렬)

1차원 배열의 선언 type[] 배열명 or type 배열명[] int[] a; int a[]; 1차원 배열의 초기화 1. type[] 배열명 = {v1, v2, ...}; (선언과 동시에 해야 한다.) char[] ch = {'A', 'B', 'C'}; 2. 배열명 = new type[개수]; (선언과 별개로 초기화 가능) int[] a; a = new int[3]; // 각 배열의 원소는 int의 default value인 0으로 초기화 된다. 3. 배열명 = new type[]{v1, v2, ...}; (선언과 별개로 초기화 가능) float[] b; b = new float[]{1.2f, 2.3f, 3.4f}; 다차원 배열의 선언 1. type[][] 배열명; boolean[][] a; 2. ty..

카테고리 없음 2021.05.02

Java | clone()으로 깊은 복사하기

clone() Object 클래스의 메소드로, 이 메소드가 호출된 인스턴스의 복사본(깊은 복사)이 생성되고 복사본의 참조 값이 반환된다. 클래스가 Cloneable 인터페이스를 구현(implements)하고 있어야 clone()으로 복사가 가능하다. 그렇지 않으면 clone()을 재정의 해도 CloneNotSupportedException이 발생한다. 객체 복사 예시 복사할 User 클래스이다. Cloneable 인터페이스를 구현하고, clone()을 재정의한다. User 객체 복사 시, 멤버 중의 Character란 클래스의 객체도 같이 복사해주도록 재정의한다. public class User implements Cloneable { private String id; private String pass..

개발_웹/Java 2021.05.02

Java | Java의 객체 직렬화 (Serialization)

직렬화(Serialization) 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미한다. 객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해준다. 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용된다. 직렬화 대상객체는 java.io.Serializable를 implements한 클래스 객체여야 하며, 다른 객체를 멤버변수로 갖고 있는 경우 그 객체들도 Serializable을 implements해야 한다. ※ SerialVersionUID private static final long serialVersionUID 직렬화를 하면 내부에서 자동으로 SerialVersionUID라는 고유의 번호를 생성하여 관리한다. 직렬화/역직렬화 시 이 UID 값이..

개발_웹/Java 2021.02.17

Java | Java에서 Swap 함수 구현 (Java의 call-by-reference)

Call-by-Value와 Call-by-Reference 1. call-by-value 메소드의 파라미터로 호출자(caller)가 제공한 값을 전달하는 방식입니다. 파라미터 값이 복사되어 전달되므로, 호출자의 값은 수정되지 않습니다. 자바는 call-by-value 방식을 따릅니다. 2. call-by-reference 메소드의 파라미터로 호출자(caller)가 제공한 값의 위치를 전달하는 방식입니다. 파라미터로 값의 참조가 전달되므로, 호출자의 값이 수정될 수 있습니다. 포인터가 없는 Java에서 Swap 함수를 구현하기 Java는 항상 call-by-value 를 사용한다. 메소드는 파라미터로 전달된 기본자료형의 값을 변경할 수 없다. C와는 다르게 포인터를 쓸 수 없었기 때문에 Java를 처음 공..

개발_웹/Java 2021.02.17

쿠키 (Cookie)

비연결지향형인 HTTP 프로토콜은 응답 후에 연결을 지속하지 않으며, 기존의 정보 또한 저장하지 않는다. 이런 부분을 보완하기 위하여 쿠키(Cookie)와 세션(Session)을 이용할 수 있다. 주로 로그인이나 장바구니와 같이 사용자의 정보를 저장해두는데 사용된다. 쿠키는 세션과 달리 클라이언트(Client)에 데이터를 저장한다. 서버가 쿠키를 클라이언트에 저장해두면, 나중에 웹서버가 쿠키의 정보를 필요로 할 때 클라이언트가 웹서버로 쿠키의 정보를 보내준다. 보안에 취약하고 용량이 작다는 단점이 존재하며 웹브라우저가 쿠키를 차단하는 경우 사용할 수 없다. 1. 쿠키 생성 @RequestMapping("/login.do") public String login(String id, String passwor..

세션 (Session)

비연결지향형인 HTTP 프로토콜은 응답 후에 연결을 지속하지 않으며, 기존의 정보 또한 저장하지 않는다. 이런 부분을 보완하기 위하여 쿠키(Cookie)와 세션(Session)을 이용할 수 있다. 주로 로그인이나 장바구니와 같이 사용자의 정보를 저장해두는데 사용된다. 세션은 쿠키와 달리 서버(Server)에 데이터를 저장하고 관리한다. 보안, 부하 등의 이유로 꼭 사용해야만 하는 곳에만 쓰는 것을 권장하며 세션에 DTO 객체를 통째로 넣거나, 이것저것 다 넣는건 지양한다. 은행 사이트 같은 곳에선 5분 정도 지나면 위와 같은 이유로 자동으로 세션을 종료시킨다. 1. 세션에 데이터 넣기 세션 값을 설정하기 위해서는 HttpSession.setAttribute(String key, Object value) ..