☕ Java

    추상화

    차를 탈 때 차의 내부가 어떻게 돌아가는지 알 필요 없는 것과 같다. 자바도 프로그램을 만들 때 이진법같은 기계어를 사용하지 않는다. 자바도 세부과정이 추상화 된 것. 추상화는 캡슐화와 연관깊다. 캡슐화는 특정 개체에 속하는 데이터를 숨겨 접근을 차단하고 연산만 허용한다. 추상화는 훨씬 포괄적인 개념으로 모든 복잡한 내용을 숨기기 때문에 사용자는 복잡한 세부 내용을 몰라도 프로그램을 사용할 수 있다.

    캡슐화

    캡슐화는 한 개체를 다른 개체로부터 보호하는 것. 클래스는 특정 클래스의 데이터를 직접적으로 바꿀 수 없다. 상태 = 데이터를 바꾸고 싶다면 해당 클래스에서 수행하는 동작 = 메서드를 통해야 한다. 캡슐화의 기본 원칙 중 하나. getter와 setter를 사용하는 이유도 된다. getter와 setter를 사용하는 이유 데이터를 직접적으로 바꾸지 않고 메서드를 이용해서 변경하게 되면 말도 안되는 값을 데이터에 넣지 못하도록 논리를 정할 수 있게 되고 잘못 된 값으로 데이터가 변경되는 일을 막을 수 있다. 특정 데이터를 걸러 내주는 역할도 캡슐화의 역할 중 하나. 다양한 연산 값을 그냥 변경하는 것이 아닌 연산을 수행해서 값을 넣어야 할 때, 이런 비즈니스 로직도 클래스 안에 캡슐화 할 수 있다. 비즈니..

    String과 StringBuffer / StringBuilder 차이점

    String String은 StringBuffer와 StringBuilder와의 큰 차이점은 한번 값이 할당되면 그 할당된 공간의 크기가 변하지 않는 불변(immutable)의 속성을 갖고 있다. hello로 선언한 String이 hello world로 값을 변경하게 되면 기존 주소에 있던 hello는 GC에 의해 제거되고 새로운 인스턴스인 hello world 주소를 가리키게 된다. 변하지 않는 문자열을 읽어 들일 때 String을 사용하면 좋다. StringBuffer/StringBuilder의 공통점 반면 StringBuffer와 StringBuilder는 가변(mutable) 성을 가진다. 문자열 연산 등으로 기존 객체의 공간이 부족할 경우 버퍼 크기를 늘리면서 유연하게 동작한다. 클래스가 제공하..

    JRE와 JDK

    JRE (Java Runtime Environment) JRE = JVM + Lbraries + Other components 말 그대로 자바를 실행할 수 있는 환경. 어떤 자바 프로그램이든 기본적으로 내장되어야 하는 클래스가 있다.예를 들면 System.out.println(). S.o.p는 Libraries에 들어있다. JDK (Java Development Kit) JDK = JRE + Compilers + Debuggers JDK는 자바 프로그램을 개발하고, 컴파일하고, 실행까지 필요한 것들이 모아진 것이다. 프로그램을 실행만 하는 사용자라면 JRE가 필요하고 프로그램을 개발하는 개발자라면 JDK가 필요하다.