'programming'에 해당되는 글 2건
문자열(String) 객체에 대한 비교연산 #equals? #==?
두 객체가 같은지 비교하고 싶다.
String A = "aaa";
String B = "aaa";
위의 두 A, B 객체는 같다고 할 수 있을까?
상등연산자 '=='로 참조자료형을 비교하려고 사용하면 그 주소값이 같은지 확인한다.
그렇다면 A와 B 모두 상수형 문자열 "aaa"를 가리키기 때문에 같은 주소값을 같는 객체로 true가 나와야한다.
System.out.println(A==B);
컴파일하여 실행해보면 콘솔창에 "true"가 출력되는 것을 볼 수 있다.
String A = "aaa";
String B = new String("aaa");
위의 경우에는 어떨까?
결과는 "false"가 출력된다.
왜냐하면 두 객체의 '값'은 같을지라도 A가 가리키는 "aaa"와, B가 가리키는 "aaa"는 같은 메모리 주소에 위치하지 않고 각각 다른 장소에 저장되어있다. 그렇기에 '=='를 사용하면 "false"를 반환한다.
하지만 현실세계에서 "aaa"와 "aaa"는 같다. 그렇기에 당연히 프로그램에서도 동일한 객체로 인식하게끔 프로그래밍하고 싶을 것이다.
equals() :: 객체가 같은지 비교하는 메소드
모든 클래스에서는 아래와 같은 메소드를 사용할 수 있다.
public boolean equals(Object obj)
위의 메소드는 현재 객체와 매개 변수로 넘겨받은 객체가 같은지 확인한다. 같으면 true를, 다르면 false를 리턴한다.
따로 내가 저런 메소드를 생성하지 않았는데 어떻게 사용할 수 있을까?
왜냐하면 보이지 않지만 자바의 모든 클래스는 java.lang.object 클래스를 상속하고있다.
object 클래스에 관해서는 더 자세히 포스팅하겠다. 구글에서 검색하면 아주 좋은 설명들이 많다.
String A = "aaa";
String B = new String("aaa");
System.out.println(A.equals(B));
위와 같은 코드를 실행하면 정상적으로 "true"가 출력된다.
하지만 일반적으로 String을 제외한 객체들의 경우 위와 같은 코드로는 "false"가 출력된다.
이에 대한 포스팅은 다음에..
파이썬 기초 :: 특수문자열, 연산자, 튜플, 리스트, 사전
#특수문자열
- 예제
print("What's your name?\nAnswer : My name is Jason.")
결과화면:
What's your name?
Answer : My name is Jason.
\n은 이스케이프 시퀀스, 즉 특수 문자열의 대표적인 예. 특수 문자열을 사용하는 경우는 아주 흔하니 꼭 기억하자. (책에는 \(역슬래시)가 \로도 표현되어 있는데 같은 의미이니 혼동하지 말자.)
특수문자열 |
내용 |
\n |
문자열의 줄을 바꿈 |
\t |
문자열에 탭 형식의 들여쓰기를 삽입 |
\\ | 문자열에 \(역슬래시) 문자를 표현 |
\" | 문자열에 인용 부호를 표현 |
#산술연산자
연산자 |
의미 |
예제 |
결과값 |
* |
곱하기 |
5*4 |
20 |
/ |
나누기(일반) |
10/4 |
2.5 |
// |
나누기(정수값만) |
10/4 |
2 |
% |
나머지 |
10%4 |
2 |
+ |
더하기 |
5+4 |
9 |
- |
빼기 |
5-4 |
1 |
- 예제
print("10을 4로 나누면? ", 10/4, "나머지는?", 10%4)
결과화면:
10을 4로 나누면? 2.5 나머지는? 2
#비교연산자
연산자 |
의미 |
연산자 |
의미 |
== |
~와 같으면 |
!= |
~와 같지 않다면 |
> |
~보다 크면 |
< |
~보다 작으면 |
>= |
~보다 크거나 같으면 |
<= |
~보다 작거나 같으면 |
#튜플
튜플에는 문자열, 숫자, 다른 자료형을 저장할 수 있다.
- 예제
ex_tuple("하나", "둘", "셋")
print(ex_tuple[0]) -> '하나', ex_tuple[0] -> '하나'
튜플은 콤마로 값을 구분한다. 튜플은 한번 저장된 값을 변경할 수 없다. 이점을 이용하여 값을 바꿀 일이 없는 경우에 튜플을 사용하는 것이 옳다.
# 리스트
리스트는 튜플과 같지만 다른점은 저장된 값을 변경할 수 있습니다. 또 리스트는 함수로 항목을 삽입하거나 삭제할 수 있다.
- 예제
ex_list = ["하나", "둘", "셋"]
print(ex_list[2]) -> 셋, ex_list[2] -> '셋'
#사전
사전은 항목을 가리키는 고유한 이름을 값는다. 인덱스로 키 이름을 사용한다. 키에는 문자열, 정수, 실수 또는 튜플도 사용할 수 있다.
- 예제
ex_dictionary = {1:"강아지", 2:"고양이", 3:"말", 4:"돼지"}
print(ex_dictionary[2]) -> 고양이, ex_dictionary[2] -> '고양이'
예제에서 정수 1, 2, 3, 4를 인덱스로 사용하였다. 콜론(:)으로 키와 키에 해당하는 값을 구분한다.
# 유용한 기능 정리
- 예시(표에서 표현할 자료형)
>>> s = "dog" # 문자열
>>> t = ("d", "o", "g") # 튜플
>>> l = ["d", "o", "g") # 리스트
>>> d = {1:"d", 2:"o", 3:"g"} # 사전
기능(function) |
문자열(string) |
튜플(tuple) |
리스트(list) |
사전(dictionary) |
모든 요소 출력 |
>>> print(s) dog |
>>> print(t) ('d', 'o', 'g') |
>>> print(l) ['d', 'o', 'g'] |
>>> print(d) {1:'d', 2:'o', 3:'g'} |
요소 출력 |
>>> print(s[2]) g |
>>> print(t[2]) g |
>>> print(l[2]) g |
>>> print(d[2]) o |
결합 |
>>> a=s+("g",) >>> a 'dogg' |
>>> a=t+("g",) >>> a ('d', 'o', 'g', 'g') |
>>> a=l+["g"] >>> a ['d', 'o', 'g', 'g'] |
|
요소 추가 |
불가 |
불가 |
>>> l.append("g") >>> l ['d', 'o', 'g', 'g'] |
>>> d[4] = "g" >>> d[4] 'g' |
정렬 |
불가 |
불가 |
>>> l.sort() >>> l ['d', 'g', 'g', 'o'] |
>>> sorted(d) ['1', '2', '3'] >>> sorted(d.values()) ['d', 'g', 'o'] |
요소 삭제 |
불가 |
불가 |
>>> del l[1] >>> l ['d', 'g'] |
>>> del d[1] >>> d {2:'o', 3:'g'} |
요소 치환 |
불가 |
불가 |
>>> l[0] = "a" >>> l ['a', 'o', 'g'] |
>>> d[1] = "a" >>> print(d) {1:'a', 2:'o', 3:'g'} |
찾기 |
>>> i.find("d") 0 |
>>> t.index("d") 0 |
>>> l.index("d") 0 |
|
길이 얻음 | >>> len(s) 3 | >>> len(t) 3 | >>> len(l) 3 | >>> len(d) 3 |
요새 파이썬을 활용하고 있습니다. C, C++, java 등의 다른 언어는 많이 접하였지만 파이썬은 데이터 마이닝 기법을 공부하면서도 문법이 혼동되는 경우가 있더군요. 제가 공부한 내용을 정리하는 식으로 포스팅 할 예정이고, 사실 다른 언어와 비슷한 부분이 많아 기초문법에 많은 시간을 할애할 필요는 없지만 그래도 기초적인 것 부터 보고 나가야 후에 시간을 낭비하는 경우가 생기는 일이 없겠죠?