심심풀이 문제2 - String
문제
출력 결과는 무엇일까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Test { public static void main(String[] args) { String a = "CGun"; String b = new String("CGun"); String c = a; String d = b; a += " Good"; b += " Good"; System.out.println(c); System.out.println(d); } } | cs |
정답
해설
"java string immutable" 혹은 "java string 불변"
으로 검색해보시면 많은 정보를 얻으실 수 있습니다.
'뿌리튼튼 CS > Java' 카테고리의 다른 글
심심풀이 문제4 - Object Assign (객체 대입) (0) | 2016.10.04 |
---|---|
심심풀이 문제3 - Call by Value vs Call by Reference (0) | 2016.10.04 |
생성자를 쓰는 이유. 생성자의 필요성 (Why use constructors) (0) | 2016.08.02 |
심심풀이 문제1 - Object.equals() (0) | 2016.07.16 |
[Collection] ArrayList vs Vector (0) | 2016.02.01 |
생성자를 쓰는 이유. 생성자의 필요성 (Why use constructors)
이유1: 객체 생성시 초기화 작업
일반 변수들의 경우, 생성자 없이 전역에서 바로 초기화를 해줘도 됩니다.
하지만 불가능해서 꼭 생성자에서 초기화를 해줘야하는 경우도 있습니다.
1 2 3 4 5 | import java.io.FileInputStream; public class FileHandler { private FileInputStream fis = new FileInputStream("\tmpFile"); } | cs |
위 코드는 컴파일에러가 발생하며, 아래와 같이 수정해야 합니다.
1 2 3 4 5 6 7 8 9 10 | import java.io.FileInputStream; import java.io.FileNotFoundException; public class FileHandler { private FileInputStream fis; public FileHandler() throws FileNotFoundException { fis = new FileInputStream("\tmpFile"); } } | cs |
new FileInputStream() 에서 FileNotFoundException 을 throw 하므로 받아줘야 하기 때문입니다.
이유2: 객체 생성시 필수입력값을 강제하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class Human { private String name; private String nickName; private int age; public Human(String name) { this.name = name; } public void setNickName(String nickName) { this.nickName = nickName; } public void setAge(int age) { this.age = age; } } | cs |
사람 객체를 생성시 name 을 필수입력 항목으로 강제하는 코드입니다.
그외 nickName 과 age 는 원하는 경우에 한해 set 함수로 입력할 수 있습니다.
'뿌리튼튼 CS > Java' 카테고리의 다른 글
심심풀이 문제3 - Call by Value vs Call by Reference (0) | 2016.10.04 |
---|---|
심심풀이 문제2 - String (0) | 2016.08.02 |
심심풀이 문제1 - Object.equals() (0) | 2016.07.16 |
[Collection] ArrayList vs Vector (0) | 2016.02.01 |
String vs StringBuilder vs StringBuffer (2) | 2016.01.28 |
심심풀이 문제1 - Object.equals()
문제
출력 결과는 무엇일까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Test { public static void main(String[] args) { User a = new User("CGun", 29); User b = new User("CGun", 29); User c = a; System.out.println(a == b); System.out.println(a == c); System.out.println(a.equals(b)); } public static class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } } } | cs |
정답
해설
위 소스코드를 자세히 보시면 User 클래스 안에 equals() 메서드가 없습니다.
근데 왜 컴파일 에러가 안날까요?
Java 에서 모든 클래스들은 기본적으로 Object 클래스를 상속받습니다.
extends Object 가 생략되었을 뿐입니다.
그리고 이 Object 클래스 안에 equals() 메서드가 존재하고 있으며, 소스코드는 아래와 같습니다.
네. 따라서 a.equals(b) 는 a == b 와 완전히 같습니다.
String.equals() 문제에 익숙한 분들을 향한 함정 문제였습니다.
참고
출처
'뿌리튼튼 CS > Java' 카테고리의 다른 글
심심풀이 문제2 - String (0) | 2016.08.02 |
---|---|
생성자를 쓰는 이유. 생성자의 필요성 (Why use constructors) (0) | 2016.08.02 |
[Collection] ArrayList vs Vector (0) | 2016.02.01 |
String vs StringBuilder vs StringBuffer (2) | 2016.01.28 |
Array size in Loops (0) | 2015.07.31 |
[JavaScript(ES6)] Promise
프라미스 (Promise) 란
비동기적으로 결과를 리턴하는 함수에 대한 비동기 프로그래밍 패턴의 일종이다.
(※ 매우 중요한 개념이므로 필히 익히시기를 추천합니다.)
A부터 Z까지 Promises 의 모든 것
http://www.html5rocks.com/ko/tutorials/es6/promises/
너무도 완벽한 글을 찾아서 본문 없이 그냥 위 링크로 대체합니다.
한편, 퀄리티가 이 정도로 좋은 글을 쓰는 사람은 어떤 사람인지 궁금해서 찾아보았습니다.
네... 그렇습니다. 구글러네요.
전공적인 깊은 이해는 물론이고 글솜씨와 전개방식도 완벽합니다.
존경합니다.
'뿌리튼튼 CS > Web' 카테고리의 다른 글
구형 브라우저에서의 HTML5 (HTML5 Browser Support) (0) | 2016.06.11 |
---|---|
[JavaScript(ES6)] Proxy (0) | 2016.05.19 |
[JavaScript(ES6)] Iterators and Generators (0) | 2016.05.16 |
[JavaScript] DOM 엑세스 줄이기 (Reduce DOM Access) (0) | 2015.08.03 |
[JavaScript] Loose Comparison vs. Strict Comparison (0) | 2015.07.31 |