'programming'에 해당되는 글 2건

programming/Java

문자열(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"가 출력된다.

이에 대한 포스팅은 다음에..





programming/Python

파이썬 기초 :: 특수문자열, 연산자, 튜플, 리스트, 사전

#특수문자열

- 예제

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 등의 다른 언어는 많이 접하였지만 파이썬은 데이터 마이닝 기법을 공부하면서도 문법이 혼동되는 경우가 있더군요. 제가 공부한 내용을 정리하는 식으로 포스팅 할 예정이고, 사실 다른 언어와 비슷한 부분이 많아 기초문법에 많은 시간을 할애할 필요는 없지만 그래도 기초적인 것 부터 보고 나가야 후에 시간을 낭비하는 경우가 생기는 일이 없겠죠?

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :