목록공부공부/Java (16)
이숭간 공부기록
자바의 String, StringBuilder, StringBuffer에 최대한 깊게 알아보자! Constant pool 자바 클래스 파일 구성항목중 하나인 Constant pool은 리터럴 상수값을 저장하는 곳이다. 문자열뿐만 아니라, 모든종류의 숫자, 문자열, 식별자이름등에 대한 인덱스를 번호로 제공한다. 즉, 런타임시점에 "hello"의 리터럴을 사용하는 메소드를 여러번 호출한다해도 새로운 메모리공간을 할당하는것이 아니라, Constant pool의 인덱스를 참조한다. 단, Constant Pool은 클래스단위로 관리되기때문에 같은 리터럴이라 하더라도 서로다른 클래스에서 등장한다면 다른 인덱스값을 갖는다. 정리 : CP를 사용해 이미 존재하는 문자열의 경우, 똑같은 문자열을 갖는 새로운 메모리공간을..
우선 엄연하게 말한다면 자바의 동작방식은 Call by Value이다. 이는 주소(레퍼런스)를 하나의 값으로 보기 때문이다. 자세히 알아보자 Call by Value(값에 의한 호출) 함수가 호출될 때, 메모리공간에서 함수를 위한 별도의 임시공간이 생성된다. (메모리 스택공간) 함수 호출시 인자로 전달되는 변수의 값(메모리에 저장되어있는)을 복사하여 함수의 인자로 전달한다. 복사된 인자는 로컬변수의 특성을 갖는다. 함수안에서 값이 변경되어도 외부 변수값은 변경되지 않는다. Call by Reference(참조에 의한 호출) 함수가 호출될 때, 메모리공간에서 함수를 위한 별도의 임시공간이 생성된다. (메모리 스택공간) 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. 함수에서 인자값이 변경되면 레퍼..
추상클래스와 인터페이스는 둘다 다형성을 구현하는데 쓰인다는 공통점이 있지만 개념적으로 차이가 있다. 상속은 "같은 종류의 하위 클래스를 만드는 기술"이라면 인터페이스는 "사용방법이 동일한 클래스를 만드는 기술" 이라는 점에서 차이가 있다. 추상클래스란? 미완성 설계도 abstract 키워드로 선언된 클래스 추상메서드를 최소 한개 이상 가진다. 추상메서드가 없어도 abstract키워드로 선언된 클래스면 추상클래스이다. 추상클래스의 구현 서브(자식)클래스에서 슈퍼(부모)클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다. 추상클래스의 목적 상속을 위한 클래스로, 객체생성을 위한 클래스가 아니다. 단지 여러 클래스의 공통된 부분을 추상화(추출)하여 상속받는 클래스에게 구현을 강제하기 위한것 ..
Object Oriented Programming 객체지향 프로그래밍이란,, 너무나도 크고 추상적인 개념이고 또한 매우 중요하다 사실 자바에대한 공부를 하는것도 객체지향적 프로그래밍을 하기 위한것이라고 생각한다. 객체지향 프로그래밍이란 간단하게 말해 현실세계를 컴퓨터로 옮겨서 프로그래밍하는것이라고 생각한다. 현실의 사물을 하나의 객체로보고 공통된 성질을 가지는 객체들을 나타낼수있는 특징을 추상화시켜 하나의 클래스로 만든다. OOP의 4가지 특징 추상화(Abstraction) 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것 추상화를 이용하면 공통된 특성을 뽑아 하나의 클래스를 정의할 수 있다. 즉 객체지향적 관점에서 클래스를 정의하는것을 추상화라고 할 수 있다. 캡슐화(E..
Wrapper class 프로그램에 따라 기본타입의 데이터를 객체로 취급해야 하는 경우에 자바에서 제공하는 Wrapper class를 이용한다. 예시로, 어떤 메소드의 파라미터가 객체타입만 가능하다면, 기본타입을 그대로 사용할 수 없으므로 래퍼클래스를 한번 거쳐서 객체로 변환후 메소드를 호출해야한다. - 자바에서 제공하는 Wrapper class byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 래퍼클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당값을 가지는 객체로 만들어준다. 래퍼클래스는 모두 java.lang패키지에 포함되어 제공된다. 박싱, 언박싱 래퍼클래..
Optional Java8부터 Optional클래스를 사용해 NullPointerException(이하 NPE)를 방지할수 있도록 했다. Optional 클래스는 Integer나 Double클래스처럼 T타입의 객체를 포장해주는 래퍼클래스이다. Optional는 null이 올수 있는 값을 감싸는 Wrapper클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. 즉, 예상치못한 NPE예외를 제공되는 메소드로 간단히 회피할 수 있어 복잡한 조건문 없이도 null값으로 인해 발생하는 예외를 처리할 수 있다. public final class Optional { // If non-null, the value; if null, indicates no value is present private final T ..