본문 바로가기

Java

(17)
Java의 Class Class(클래스) 소프트웨어를 개발할 때에도 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP: Object Oriented Programming)이라고 한다 객체란 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다 그리고 이 객체들간의 상호작용의 수단은 메소드이고 객체가 다른 객체의 기능을 이용하기 위해 메소드를 호출한다 객체는 다른 객체와 관계를 맺기도 하는데 집합 관계, 사용 관계, 상속 관계가 있다 객체 지향 프로그래밍의 특징 캡슐화(Encapsulation) 캡슐화란 실제 구현 내용을 외부에서 알 수 없도록 감추는 것을 말한다 캡슐화를 하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 것..
Java에서 String이 메모리에 생성되는 과정의 이해 String 문자열을 리터럴을 사용한 경우, 같은 문자열을 갖는 변수들에 대해 동일한 주소값을 갖는다 == 동등비교 연산자는 String의 주소값을 비교하는 것인데 같은 문자열에 대해 리터럴을 사용한 경우, 동등비교 시 true를 반환한다 String str1 = "Youn"; String str2 = "Youn"; 위와 같은 예제의 경우 str1 == str2 비교 시, Youn이라는 같은 주소의 String 객체를 가리키므로 true를 반환하게 된다 그렇다면 str1에서 먼저 Youn 문자열을 갖는 String 객체가 할당이 되고 이후에 str2가 만들어 졌는데 어떻게 Youn 문자열을 갖는 String 객체가 생성되어 있는지 알고 동일한 주소를 할당할 수 있는건지 궁금해졌다 String은 클래스 타..
Java 참조 타입 참조 타입 참조 타입이란 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다 int age = 26; // 기본타입 String name = "youn"; // 참조타입 기본타입과 참조타입 둘 다 변수는 Stack영역에 생성된다 참조타입의 객체는 Heap영역에 생성된다 따라서 Stack영역에 생성된 참조타입의 변수는 Heap영역에 생성된 객체의 주소값을 갖는다메모리 사용 영역 메소드 영역 클래스들을 클래스 로더로 읽어 클래스별로 런타임 상수 풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등 분류해서 저장한다 모든 쓰레드가 공유하는 영역이다 힙 영역 객체와 배열이 생성되는 영역이다 힙 영역의 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조된다..
Java 조건문과 반복문 조건문과 반복문 조건문 if문 if 조건문은 조건식의 값이 true이면 조건문 내의 내용을 실행시키고 다르다면 내부에 있는 실행문을 수행하지 않고 지나간다 if-else조건문은 if의 조건식의 결과가 true라면 if 내부의 코드를 실행하고 else 내부는 수행하지 않는다 반대로 if의 조건식의 결과가 false라면 if문은 지나치고 else에 있는 코드를 수행한다 if-else if-else조건문은 if와 else if로 이루어진 조건식들을 위에서부터 순차적으로 검사를 한다 검사도중 조건식이 true인 최초의 경우의 코드를 실행한다 만약 모든 조건식을 검사할때까지 true인 조건식이 없다면 else문의 코드를 실행시킨다 중첩 if문은 말그대로 if문이 중첩된 경우를 말하며 중첩된 if문 또한 위에 설명..
Java의 변수, 타입, 연산자 변수 하나의 값을 저장할 수 잇는 메모리 공간을 말하며 이 메모리 주소에 붙여진 이름이 변수명인 것이다 리터럴(literal) : 소스코드 내에 직접 입력된 값 변수들은 선언된 중괄호{} 블럭 안에서만 사용이 가능하다 데이터 타입 정수타입 byte type byte 타입은 바이너리 데이터를 처리할 때 주로 사용된다 범위 : -2^7 ~ 2^7 - 1 (0포함하므로 2^7 - 1까지 이다) 가장 앞에 있는 bit(최상위 비트/MSB:Most Significant Bit)는 부호(+/-)를 결정 프로그램 실행중에 저장할 수 있는 값의 범위를 초과하ㅏ면 최소값부터 다시 반복 저장된다 char type 유니코드를 저장하기 위한 2byte 크기를 같는 데이터 타입이다 char c1 = 'A'; ch..
Java에 GC가 있지만 close() 메서드를 사용하는 이유 자바 코드를 보다보면 close() 메소드가 작성되어 있는걸 볼 수 있다 그리고 자바를 공부하다 보면 자바는 더 이상 사용하지 않는 메모리를 해제하는 Garbage Collector를 알게 된다 여기서 생기는 궁금증은 GC가 알아서 메모리를 해제해주는데 close()를 작성해주는 이유는 무엇일까? (아래 내용은 개발바닥 유튜브 오픈카톡방에 질문을 올려 알게된 내용을 정리 해둔것 입니다) 보통 close() 메서드가 있는 클래스들은 OS로부터 자원을 할당 받아 사용하는 네이티브 메소드들을 가지고 있는 경우들이 있는데 이렇게 C에서 자원을 할당 받은 경우 GC가 자원을 할당 받았는지 알 수가 없기 때문에 close() 메서드를 통해서 자원을 그만쓴다라는 것을 알리고 GC가 메모리를 해제 할 수 있도록 하는 ..
Java 특징 1. 이식성이 높다 이식성이란 서로 다른 환경의 시스템에서 동일하게 프로그램이 실행이 되는 것 Java언어로 개발된 프로그램들은 JRE(Java Runtime Environment)라는 자바 실행 환경이 설치되어 있는 경우 모든 운영체제에서 실행 가능하다 2. 객체 재향 언어 객체 지향 언어가 가져야할 캡슐화, 상속, 다형성 기능을 완벽하게 지원 3. 함수적 스타일 코딩을 지원 함수적 프로그래밍은 대용량 데이터의 병렬 처리 그리고 이벤트 지향 프로그래밍을 위해 적합하다 자바는 함수적 프로그래밍 지원을 위해 람다식(Lambda Expressions)을 Java8부터 지원한다 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해진다 4. 메모리를 자동으로 관리한다 ..