Java/[도서] 자바의 정석 14

연산자, 조건문과 반복문 (2/8)

참고한 repository : https://github.com/vividswan/The_Essence_of_Java_Book_Study 연산자 연산자 : 연산을 수행하는 기호(+, -, *, / 등) 피연산자 : 연산자의 작업 대상 연산자는 피연산자로 연산을 수행한 후 결괏값을 반환합니다. 연산자의 종류 산술 연산자 +, -, *, /, % 비교 연산자 , >=, 비교 > 논리 > 대입 우선순위 단항(1) > 이항(2) > 삼항(3) 우선순위 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽 산술 변환 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것을 '산술 변환' 또는 '일반 산술 변환'이라 부름 두 피연산자의 타입을 같게 일치 시킴 보다 큰 타입으로 일치 피연산..

자바, 변수, 기본형과 참조형, 상수와 리터럴, 진법, 형변환 (1/8)

토이 프로젝트를 하면서 자바에 대해 중간중간 개념이 헷갈리는 부분이 보였습니다. 예전에 자바의 정석을 1독 한 적 있지만 다시 읽고 처음부터 정리하는 것이 너무 오래 걸릴 것 같아 항상 미뤄왔었습니다. 그러다 우연히 잘 정리된 GitHub repository가 있어 많은 도움을 받았습니다. 이번 시리즈는 하나하나 깊게 개념을 공부해서 정리한 것이 아닌 크게 크게 어떤 개념들이 있는지 마치 도서의 목차를 머릿속에 넣는다는 느낌으로 진행하고자 합니다. 참고한 repository : https://github.com/vividswan/The_Essence_of_Java_Book_Study 자바(Java Programming Language)란? 썬 마이크로시스템즈에서 개발 후 1996년 1월 공식 발표 운영체..

생성자(constructor)

자바의 정석 Chapter 소제목 6. 객체지향 프로그래밍 5. 생성자(constructor) 생성자란? 생성자는 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’입니다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용됩니다. |참고| 인스턴스 초기화란 인스턴수 변수들을 초기화하는 것을 뜻한다. 생성자 역시 메서드처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다릅니다. 그렇다고 해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지는 않고, 단지 아무것도 적지 않습니다. |참고| 생성자도 메서드이기 때문에 리턴값이 없다는 의미로 void를 붙여야 하지만, 모든 생성자가 리턴값이 없으므로 void를 생략할 수 있게 한 것이다. 생성자의 조건 💡 1. 생성자..

오버라이딩(overriding)

자바의 정석 Chapter 소제목 7. 객체지향 프로그래밍 2. 오버라이딩(overriding) 오버라이딩이란? 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것(재정의)을 오버라이딩이라고 합니다. 2차원 좌표계의 한 점을 표현하기 위한 Point클래스가 있을 때, 이를 조상으로 하는 Point3D클래스 - 3차원 좌표계의 한 점을 표현하기 위한 클래스 코드를 작성해보았습니다. class Point { int x; int y; String getLocation() { return "x :" +x+ ", y :" +y; } } class Point3D extends Point { int z; String getLocation() { // 오버라이딩 return "x :" +x+ ", y :" +y+ ..

오버로딩(overloading)

자바의 정석 Chapter 소제목 6. 객체지향 프로그래밍 4. 오버로딩(overloading) 오버로딩이란? 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야 합니다. 그러나 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있습니다. 이처럼 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 ‘메서드 오버로딩’ , 짧게 줄여서 오버로딩이라 합니다. 오버로딩의 조건 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 합니다. 💡 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. 위 조건을..

Scanner보다 빠른 입력 BufferedReader, StringTokenizer

알고리즘 문제를 풀 때 입출력을 좀 더 빠르게 해야 할 경우가 생깁니다. 그중 오늘은 입력 클래스를 정리하려 합니다. 저는 원래 쓰기 간편한 Scanner를 주로 이용하였었는데요, 같은 문제를 풀었을 때, Scanner와 BufferedReader를 사용했을 때의 처리속도가 2배 이상 난 경우도 있었습니다. 이번 포스팅 정리를 통해서 BufferedReader, StringTokenizer를 이해하는 시간을 가져보도록 하겠습니다. Scanner // Scanner 사용 시 입력 형태. Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // int String s1 = sc.next(); // String String s2 = sc.nextLine()..

StringBuffer클래스와 StringBuilder클래스

자바의 정석 Chapter 소제목 9. java.lang패키지와 유용한 클래스 1.1.3 StringBuffer클래스와 StringBuilder클래스 알고리즘 문제를 풀거나 남들이 적어둔 코드를 보다 보면 문자열을 String이 아닌 StringBuffer 또는 StringBuilder를 사용해서 구현한 것을 볼 수 있었습니다. String클래스, StringBuffer클래스, StringBuilder클래스를 비교 분석하면서 관련 메서드까지 정리하는 시간을 가져보도록 하겠습니다. StringBuffer클래스 String클래스는 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능합니다.(mutable) 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며 , Strin..

배열의 얕은 복사, 깊은 복사

자바에서 객체를 복사할 때는 얕은 복사, 깊은 복사가 있습니다. 얕은 복사의 경우 객체의 주소 값을 복사하는 것이고 깊은 복사는 실제값을 복사해서 이 값을 새로운 메모리 공간에 복사하는 것입니다. 얕은 복사의 경우 여러 객체가 같은 주소를 참조하고 있기에 하나의 값이 변경되면 다른 대상의 값 또한 변경되는 문제가 발생하지만 깊은 복사는 이러한 문제가 발생하지 않습니다. 1차원 배열의 얕은 복사(Shallow Copy) public class Copy { public static void main(String[] args) { int[] a = {1,2,3,4,5}; int[] b = a; System.out.println(Arrays.toString(a)); // [1, 2, 3, 4, 5] System..

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

알고리즘 문제를 풀 때, 입력을 받은 후 정렬하는 경우가 많습니다. 저의 경우 오름차순은 여러 번 사용했던 터라 메서드를 알고 있었지만, 내림차순을 할 때는 잠시 망설였던 경험이 있습니다. 독자분들은 바로바로 사용하실 수 있게 이번 기회에 암기하고 가시면 좋을 것 같습니다. 공부 후 관련 알고리즘 문제까지 푸시는 것을 추천합니다. [백준 2217번] 로프 [백준 2217번] 로프 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는.. lealea.tistory.com 배열의 오름차순 정렬 Arrays.sor..

형변환 (문자형↔정수형↔실수형)

알고리즘을 풀다 보면, 같은 타입만 계속해서 있는 것이 아니라 서로 다른 타입간의 연산을 수행해야 할 일이 자주 발생합니다. 오늘은 문자형↔정수형↔실수형 형변환을 정리해보는 시간을 가져보겠습니다. 문자형 → 정수형, 실수형 String to Int String to Long, Short String to Double, Float 정수형, 실수형 → 문자형 Int to String Double, Float to String 정수형 ↔ 실수형 Int to Double, Float Double, Float to Int 문자형 → 정수형, 실수형 String to Int Integer클래스의 parseInt( )와 valueOf( ) String str = "1004" int num1 = Integer.pars..