JAVA/JAVA_Lang 13

Math Class

java.lang.Math 클래스 Math 클래스는 수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스로 Math 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용 가능하다. - Math.E : 오일러수 / 자연로그 e의미 - Math.PI : 원주율 -random( ) 0.0 이상 1.0 미만의 범위에서 임의의 double형 값을 하나 생성하여 반환한다. 정수형 난수 발생 공식 (int)(Math.random()*(상한가 - 하한가 +1)+하한가) (예) 5 이상 20 이하의 난수 발생 시키기 (int) (Math.ramdom()*(20-5+1)+5) Random ran = new Random(); System.out.println(..

JAVA/JAVA_Lang 2022.08.28

StringBuilder

자바에서 String은 변경 불가능하다. (불변의 객체) 하나의 문자열을 다른 문자열과 합치면 새 문자열이 생성되고 이전 문자열은 가비지 컬렉터로 들어간다. String과 String을 더하는 행위는 메모리 할당과 메모리 해제를 발생시키며 더하는 연산이 많아진다면 성능적으로 좋지 못하다. String은 변경 불가능 하지만 StringBuilder은 변경 가능한 문자열을 만들어 준다. Stiring을 합치는 작업시 하나의 대안으로 사용가능하다. StringBuilder 에서는append()를 이용하여 문자열을 더한다. [생성자] StringBuilder sb = new StringBuilder(); // 객체 선언 StringBuilder sb = new StringBuilder("abc") ; // 문자..

JAVA/JAVA_Lang 2022.08.28

Stack 과 Queue

Stack Stack 클래스는 List 컬렉션 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공한다. 스택 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 후입선출(LIFO)의 시멘틱을 따르는 자료 구조이다. 즉, 가장 나중에 저장된(push) 데이터가 가장 먼저 인출(pop)되는 구조이다. (비커를 생각하면 편하다.) 스텍은 Vector 클래스의 메소드 5개를 상속받아 사용한다. Stack 자료형 메소드 설명 bool empty() 해당 스택이 비어있으면 true / 비지 않았으면 false 반환 E peek() 스택의 제일 상단(제일 마지막에 저장된) 요소 반환/ 비어있으면 오류 E pop() 스택의 제일 상단(제일 마지막에 저장된) 요소 반환 하고 해당 요소를..

JAVA/JAVA_Lang 2022.08.26

StringBuffer class

java.lang.StringBuffer 클래스 : String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다. 하지만 StringBuffer 클래스의 인스턴스는 그 값을 변경할 수도 있고, 추가할 수도 있다. 이를 위해 StringBuffer 클래스는 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가진다. 버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 그 크기를 별도로 설정할 수도 있다. 하지만 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성됨 덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성합..

JAVA/JAVA_Lang 2022.08.21

배열 오름차순, 내림차순 정렬

배열은 기본적으로 Arrays.sort() 를 이용해서 정렬한다. 기본적으로 오름 차순 정렬이다. 내림 차순 정렬을 하기 위해서는 두번째 인자로 Collections.reverOrer() 을 사용한다. 예시 // 1차원 문자열 배열 정렬 public static void StringArray1D () { String[] strArray = {"aa", "ac", "ab", "ad"}; System.out.println("----String 배열 오름차순----"); Arrays.sort(strArray); for (String i : strArray) { System.out.print(i + " "); } System.out.println("\n----String 배열 역순----"); Arrays.so..

JAVA/JAVA_Lang 2022.08.21

Socket통신

Socket 이란 ? 소켓(socket) 이란 프로세스간의 통신에 사용되는 양쪽 끝단을 의미한다. 자바에서는 java.net패키지를 통해 소캣 프로그래밍을 지원하는데, 소켓 통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. 소켓은 응용프로그램에서 TCP./IP를 이용하는 창구역할을 한다. 두 프로그램이 네트워크를 통해 서로 통신을 수행 할 수 있도록 양쪽에서 생성되는 링크의 단자이다. 두 소켓이 연결되면서 서로 다른 프로그램이 서로에게 데이터를 전달 할 수 있게된다. 자바에서 Socket 통신을 사용하는 이유 먼저 자바에서 소켓 통신은 C 또는 C++ 언어로 구현된 프로젝트와의 통신에 많이 사용된다. 이유는 Java와 C의 데이터 개념이 다르기 때문인데요. C에서는 구조체를 사용하는..

JAVA/JAVA_Lang 2022.08.18

메모리구조

매소드(Method) 영역 메소드 영역은 자바 프로그램에서 사용되는 클레스에 대한 정보, 클래스 변수(static)가 저장되는 영역 JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일을 읽어들여 해당 클래스에 대한 정보를 메소드영역에 저장한다. 스텍영역 자바프로그램에서 매소드가 호출 될 때 메소드의 스택 프레임이 저장되는 영역이다. 메소드가 호출되면 메소드와 관련된 지역변수, 매개변수를 스택영역에 저장한다. 이렇게 스택영역은 메소드의 호출과 함께 할당되며 메소드의 호출이 완료되면 소멸한다. 힙영역 자바프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역이다. new키워드를 사용하여 인스턴스가 생성되면 해당 인스턴스의 정보를 힙영역에 저장한다. 힙 영역은 메모리의 낮은 주소에서..

JAVA/JAVA_Lang 2022.08.15

오버로딩과 오버라이딩

오버로딩 : 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것 오버라이딩 : 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것 자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속받는다. 이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있다. 즉, 메소드 오버라이딩이란 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 의미함. 오버라이딩의 조건 1. 오버라이딩이란 메소드의 동작만 재정의 하는것이므로, 메소드의 선언부(이름)은 기존 메소드와 완전히 같아야함. 2. 부모클래스의 메소드 보다 접근 제어자를 더 좁은 범위로 변경할 수 없다. 3.부모클래스의 메..

JAVA/JAVA_Lang 2022.08.14

재귀 호출 (recursive call)

재귀호출은 알고리즘이나 자료 구조론에서 매우 중요한 개념 중 하나이다. 재귀 호출(recursive call)이란 메소드 내부에서 해당 메소드가 또다시 호출되는 것을 의미한다. 즉 자기자신을 끊임 없이 호출하는 끝없이 반복되는 메소드이다. 따라서 메소드 내부에서 재귀 호출울 중단할 수 있도록 조건이 변경될 명령문을 반드시 작성해야 한다. 문제 : 1부터 n까지의 합 구하기 1. 재귀 호출을 사용하지 않은 경우 int sum(int n) { int result = 0; for (int i = 1; i

JAVA/JAVA_Lang 2022.08.14

추상 클래스 (abstract class)

- 추상메소드를 포함한 클래스 - 추상메소드는 구현 코드 없이 메서드으 선언만 있다. - abstract 예약어 사용 - 추상클래스는 new(인스턴스화) 할 수 없다. -추상클래스는 상속을 하기 위해 만드는 클래스이다. 하위 클래스가 이 클래스에 기반한 클래스를 구현하게된다. [추상 클래스와 템플릿 메소드] 템플릿 메소드 : 추상메소드나 구현된 메소드를 활용하여 전체 기능의 흐름(시나리오)을 정의하는 메소드 final로 선언하면 하위 클래스에서 재정의 할 수 없음 프레임 워크에서 많이 사용되는 설계 패턴 추상클래스로 선언된 상위클래스에 탬플릿 메소드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메소드로 선언해서 하위 클래스가 구현하도록 함.

JAVA/JAVA_Lang 2022.08.07