드디어 자바스크립트를 진행하게되었다. 

조금한 설명을 하자면 

자바스크립트는 인터프리터언어이다.

 

프로그래밍 언어가 동작하는방식?은 두가지로 나뉘게 되는데 하나는 컴파일언어이고 하나는 인터프리터 언어이다.

컴파일 언어는 java와 같이 전체를 빌드해서 특정 실행파일을 만들어 실행하는 방식이고 자바 스크립트같은 인터프리터 언어는 한줄한줄마다 해석해서 실행하는 방식이다.  가장 기본적인 개념이니 알아두자.

 

변수 타입

 

자바 스크립트에는 크게 변수타입이 var, let, const가 존재한다. 하나 하나 설명하자면 

 

var 가장 기본적인 변수타입.
는 일반적인 변수 이다. var 변수명으로 선언되며 특이하게 중복선언이 가능하다.
무슨말이냐면 예를들어 var obj = 1; 이라고 선언하면 변수 obj는 1이라는 정수값을 가지게 되는데 그 아래에다 var obj ="a"; 라고 선언하면 그 시점부터 obj는 a라는 string값을 가지게된다. 왜 이렇게 만들었는지는 알수 없으나. 무튼 그렇기 때문에 무자비 하게 써버리면 디버깅 어쩔? 그리고 자바스크립트에 호이스팅이라는 이상한 기능이 있는데 호이스팅이 가능하다.-> 이건 나중에 자세히 다룰예정. 
let 다시 선언해서 사용 불가능하다.
let obj = 1; 이라고 선언하고 let obj = "a";라고 선언하면 에러가 발생한다. 근데 let obj = 1;이라고 선언하고 obj='bdas' 라고 초기화 하면 또 타입이변경된다.  (뭔가 엄청 타입 변화가 유연한것같다.)(호이스팅 불가능) 
const 상수의 개념을 가진다.
const NAME = "최현성"; 이라고 선언하고 NAME ="가"; 라거나 const NAME="dsa"; 로 재정의 가 되지 않는다. 우리가 아는 상수인것같은데 책에서는 상수변수라 표현되며 정확히 따지면 진정한 상수는 아니라고 한다. 나중에 책에서 설명하면 다시 다룰 예정이다. (호이스팅불가능)

선택자 말고도 뒤에 여러 개념들이 있으나. 

다 속성이 관한 것들이기에 그걸다 포스팅한다는건 책을 쓰는것과 마찬가지다. 

내가 웹 퍼블리셔가 될것도 아니고 그러므로 css포스팅은 종료 하도록 하겠다 !

Css중에 스타일이 상속되는것들이 존재한다. 모두 다 그런건 아니고 일부 요소들만 그런것같다. 

왜 일관성이 없지 ? 예를들어 div에 color red;스타일을 적용하고 div태그에 p를 넣으면 p에 빨강색 스타일이 적용된다. 무튼 그냥 상속된다는 개념만 가지고 있으면 된다고 하니까 나중에 헷깔리지 않도록 주의하자.

가상요소 선택자

가상 요소 선택자는 html  문서에 명시적으로 작성된 구성요소는 아니지만 마치 존재하는 것처럼 취급해서 선택하는 선택자 지정방식이다.

하나하나씩 보자.

 

가상 요소 선택자는 대락 14개가 있다는데 나머지는 찾아보고 실무에서 많이 사용되는 2개를 알아보자 

 

::before = 콘텐츠의 앞공간을 선택
::before는 콘텐츠의 앞공간을 선택한다.  사용방식은 
기준선택자::가상요소 선택자 {속성 = 값;}으로 사용하자면 p::before{content:'<before>'}이런식으로 사용한다 
사용하면 p태그 시작점에 <before>라는 컨텐츠가 생성된다. 
::after = 콘텐츠 뒤의 공간을 선택합니다.
::after는 콘텐츠의 뒷공간을 선택한다. 그냥 뒤에 를 선택한다는것 빼고는 befor와 같다.
기준선택자::가상요소 선택자 {속성 = 값;}으로 사용하자면 p::after{content:'<after>'}이런식으로 사용한다 
사용하면 p태그 끝에 <after>라는 컨텐츠가 생성된다. 

팁으로 컨텐츠 속성은 해당 요소의 컨텐츠(텍스트라고 생각하면됨)를 생성해주는데 저뒤에  color나 다른 속성을 주면 컨텐츠에 속성이 적용되어 진다. 예를들어 p::after{content:'<after>; color:red;'}라고 선언하면 content인 <after>의 글자 색이 빨간색으로 선언된다.

아 참고로 가상요소 선택자에서 기준 선택자를 선언하지 않으면 전체선언자로 인식되어 적용되니 주의해야한다.

가상 클래스 선택자 

가상 클래스 선택자는 요소의 상태를 이용해 선택자를 지정하는 것이다. 버튼의 활성화나 포커싱 체크 박스에 체크 상태 또는 링크에 방문 여부등에따라 적용되는것이다. 이것도 하나하나씩 살펴보도록 하자 

 

1. 링크 가상클래스 선택자

 링크 가상 클래스 선택자도 여러 가지고 있지만(약 60개인듯) 자주 사용되는 2개만 간단하게 알아보도록 하자 

:link = 한번도 방문하지 않은 링크일때 스타일 적용
사용법은 a:link{속성=값;}이다 a에 들어있는 href속성의 링크가 한번도 방문하지 않는 사이트일때 속성이 적용된다.
:visited = 한번이라도 방문한적 있는 링크일때 선택된다.
사용법은 a:visited{속성=값;}이다. a에 들어가 있는 href속성의 링크가 한번이라도 방문한 사이트일때 속성이 적용된다.

2. 동적 가상 클래스 선택자

 

동적 가상 클레스는 사용자가 어떠한 행동을 했을경우 동적으로 변하는 상태를 이용해 선택자를 지정하는방식이다. 예를들어 커서를 어떠한 요소에 가져다대거나 클릭했을때등등이다. 

 

:hover = 사용자가 마우스를 해당 요소에 가져갈때
사용법으로는 p:hover{속성=값;}으로 사용자가 해당 요소에 마우스를 가져가면 스타일이 적용된다.
:active = 요소를 마우스로 클릭하고 있을때
사용법으로는 p:active{속성 = 값;}으로 사용자가 해당 요소에 마우스를 클릭하면 적용된다.

3.입력 요소 가상 클래스 선택자

입력요소 가상 클래스 선택자는 입력요소의 특정 상태를 선택자로 지정한다 체크 박스 체킹 여부 요소 비활성화 활성화,포커싱 여부등이다.

 

:focus = 입력요소에 포커싱이 가있을때
사용법으로는 input:focus{속성 = 값;}으로 사용시에 해당 입력 요소에 포커싱이가 있으면 스타일이 적용된다. 예를들어 텍스트 박스에 커서가 깜빡거리면 그 텍스트박스에 속성이 적용되는것이다.
:checked = 체크박스에 체크되어있을때
사용법으로는 input:checked{속성=값;}으로 체크 박스에 체크되면 속성이 적용된다. 체크 박스는 그냥 박스일 뿐이니까 보통 input:checked+label{속성 = 값;}으로 인접 형제 선택자를 조합해서 사용하는것같다 이런식으로 사용되면 인접형제인 label에도 속성이 적용된다.
:disabled = 비활성화된 입력요소에 적용
사용법으로는 input:disabled{속성=값;}으로 disabled가 적용된 입력 요소에 스타일을 적용한다.
:enabled = 활성화된 입력요소에 적용
사용법으로는 input:enabled{속성=값;}으로 enabled 즉 disabled가 아닌 입력요소에 스타일을 적용한다. 

4.구조적 가상클레스 선택자

어떠한 요소의 관계에 따라 스타일을 지정하는 방식으로 아주 어렵게 만들어놓았다. (자체적으로 난독화를 걸어놓은거같이.)

관계는 주로 같은 부모 의 특정 요소들로 지정된다.

 

헷갈릴만한 내용이 많이 있으므로 아주 자세하게 설명해 놓았다. 이보다 자세할수 없을정도로.

 

1. E:first-last-child
설명을 진행하면 
어떠한 부모에 자식요소중에 E로 지정된 요소가 첫번째 요소일때 스타일을 지정한다. 이게 무슨말이면 
예를들어 p:first-last-child{속성 = 값;}일 경우에 어떠한 부모요소 안에 자식들중에 첫번째가 p이면 그 p태그에 스타일이 적용되는것이다. 
case 1.
<div>
 <p>나는 적용된다<p>
</div>
case 2.
<div>
<h1>이건 제목</h1>
<p>나는 적용안됨<p>
</div>

해석하자면 div가 부모요소일 경우 처음나오는 요소가 p일때만 그 p태그에 적용되는것이다. 자식 요소중에 처음으로 나오는 p가아니라 이것때문에 엄청 햇깔림. 다른 사람들은 햇깔리지 말았으면 좋겠다.
2. E:last-child
위에 선택자와 별반 다를것이 없다. 어떠한 부모 요소 안에 E로 지정된 요소가 마지막에 위치하는것이 맞으면 스타일을 지정한다. 
어떠한 부모에 자식요소중에서 E로 지정된 요소가 마지막에 있으면 해당 요소에 스타일을 지정한다.  first와 동일한 개념이니 생략하도록하겠다.
3. E:nth-child(index)
위와 동일하게 어떠한 부모안에  E로 지정된 요소가 처음을 기준으로한 index에 위치하면 스타일을 적용한다. 주의 할점은 프로그래밍과 다르게 index는 1부터 시작된다.
4. E:nth-last-child(index)
위와 동일하게 어떠한 부모안에 E로 지정된 요소가 마지막을 기준으로한 index에 위치하면 스타일을 적용한다. 
5. E:nth-of-type(index)
of-type가 들어가면 개념이 변경된다. 어떠한 부모안에 요소중에 E의 요소중 처음을 기준으로한 index번째에 위치한 녀석에게 스타일을 적용한다. 
즉 단순 요소의 정렬과는 상관없이 E로 지정된 요소만을 추려서 index를 계산한다. 
6. E:nth-last-of-type(index)
어떠한 부모안에 요소중에 E의 요소중 마지막을 기준으로한 index번째에 위치한 녀석에게 스타일을 적용한다. 
즉 단순 요소의 정렬과는 상관없이 E로 지정된 요소만을 추려서 index를 계산한다. 
7. E:first-of-type
어떠한 부모 요소중 E의 요소중에 처음에 있는 요소에게 스타일 적용 .
8.E:last-of-type
어떠한 부모 요소중 E의 요소중에 마지막에 있는 요소에게 스타일 적용.

 

'제2장 CSS' 카테고리의 다른 글

css의 종료.  (0) 2023.10.25
5.css도 상속된다.  (0) 2023.10.24
3.조합선택자  (1) 2023.10.23
2. 선택자(기본 선택자)  (1) 2023.10.19
1.CSS(HTML에 옷을 입혀보자)  (0) 2023.10.19

이번엔 조합 선택자이다. 선택자를 조합해서 스타일을 지정할수 있는 기능이다. 

별거 없고 하나하나씩 알아보면된다.

 

1.그룹 선택자
여러개의 태그나 class id등의 선택자를 한번에 묶고 싶을때 사용한다.
p,#title,.div{속성 = 값;} 의 형식으로 선언되며 해당 선택자에 맞는 요소들에게 일괄 적용된다.
2. 자식 선택자
어떠한 요소의 자식들에게 적용된다. 다시한번 말하지만 css나 html에서 말하는 자식과 부모 형제는 프로그래밍의 상속의 개념과는 다르다.( 짧게 설명하면 어떠한 요소와 동일 선상에 존재하는 요소는 형제, 하위는 자식 ,상위는 부모)
사용법을 보자면 
.box > p {속성 = 값;}의 형식으로 선언되며 해석 하자면 class가 box인 요소의 자식중 p요소에 스타일을 적용하는 방식이다. 
3.하위 선택자
특정 요소의 자식 요소들에게 스타일을 정의 한다.
div p {속성 = 값;} 의 형식으로 선언되며 해석하자면 div의 자식중 p에게만 스타일을 적용한다. 
4.인접형제 선택자
인접 형태 선택자는 어떠한 요소의 형제중에 근접해있는 녀석들에게만 스타일을 적용한다. 
 h1(이전선택자) + h2(대상선택자) {속성  = 값;}의 형식으로 선언되며 해석하자면 h1다음에 오는 h2요소에게만 스타일을 적용하는것이다. 만약에 h2가 먼저 오고 h1이 온다면 해당 h2요소에는 스타일이 적용되지 않는다.
5.일반 형제 선택자
일반 형제 선택자는 인접형태 선택자와 비슷하지만 다르다. 이전 선택자 이후에 모든 대상 선택자에게 스타일을 부여한다.
h1(이전 선택자)~h2(대상선택자){속성 = 값;}으로 선언되며 h1이후에 오는 형제태그h2에게 스타일을 적용한다. 주의 해야 할점은 h1태그 이전에 선언된 형제태그h2에게는 적용안된다.(그러면서 무슨 일반형제인지. 위에 있는 태그들은 형제가 아니란말인가? 매정하네.) 

느낀점.

 

이쯤에서 HTML과 css를 만든사람은 누구일까? 개발자가 아닌 무언가가 만든느낌이 든다. 뭔가 모든걸 다 가지고 가려는 이상한 느낌. 나중에 알아봐야겠다. 이상 !

변수와 함수는 class안에서 (자바의경우) 필드와,메소드로 불린다. 둘다 내용은 같으나 변수와 함수가 좀더 상위적인 개념으로 알고 있으면됨.

CSS에서 어떠한 속성을 선택해서 지정하도록 할수 있는 기능이 이를 선택자라고 한다.

선택자는 보면 엄청난 종류가 있는데 뭔.. 선택받은 아이들도 아니고.. 왜 이렇게 많이 선택되어야 하는지 이유를 모르겠네. 모든게 선택인듯.

무튼.. HTML에서는 그놈의 웹의 접근성이 있었다면. CSS는 선택자인것같다. 무튼 

그 많고 많은 선택자중 여기선 기본이 되는 선택자들을 알아보도록 하겠다.(사실 너무 간단한 개념이고 방대하므로 코드펜으로 작성하지는 않도록 하겠음.)

 

1. 전체 선택자.
말그대로 문서에 전체 적으로 적용되는 선택자이다.  어떻게 생겼냐면
*{속성:값;}이렇게 생겼다. 프로그래머라면 익숙한 별(*)이다. 반복문 배울때도 익숙하고 ~ import할대도 익숙한 별 대충 모두 포함한다 뭐 이런 것의미다. 왜 그런의미일까? .. 무튼 저 선택자로 스타일을 작성하면 모든 태그에 적용된다.  
ex)예를 들자면 *{color:red} 라고 스타일을 작성하면 모든 세상이 빨갱이로 변한다. 하.. 

그래도 코드는 보여줘야하니까 작성한 코드를 보여줌,

<!DOCTYPE html>
<head>
    <titla>내부 스타일 시트 사용하기.</titla>
    <style>
        *{
            color: red;
        }
    </style>
</head>
<body>
    <h1>우리는 모두 빨갱이다.</h1>
    <p>나도 빨갱이고</p>
</body>
</html>

이런식으로 사용하면된다. 실행해보면 모든것들이 빨간색으로 변해있다. 주의 할것은 보여지는 부분만 속성의 정의되었다 생각할수 있는데 html태그를 비롯해서 그의 모든 자식과 손주요소들까지 속성의 정의되어있음을 이해해야한다.

 

2.태그 선택자
태그로 선택자를 지정한다. 
예는 p{속성=값;} 으로 적용하면 p요소인 녀석들에게 전부 적용된다.
3. 아이디 선택자
아이디로 선택자를 지정한다 
예는  #id명{속성 =값;} 해당 아이디의 요소에 적용된다. 참고로 요소의 아이디는 중복될수없다 (안드로이드의 view id와 같은 개념)
4. Class 선택자
Class로 선택자를 지정한다.
예는 .class명{속성 = 값;} 해당 class를 가지는 녀석들에게 모두 적용된다.
5.기본속성 선택자
속성을 선택자로 지정하는것으로 
여러 예가 있지만 a[href]{속성 =값;}으로 정의된다. 그러면 a 태그중에 href의 속성을 가진 녀석들에게 적용된다. 선택자로 태그가 올수도 있으나 #id,.class와 같이 id와 class명도 선택자로 지정가능하다 
#id[href] {속성=값;} .class[href]{속성=값;} 과 같이 말이다. 그리고 이런식으로도 응용가능하다 . 만약에 a태그중에 tartget속성이  _blank인녀석들만을 지정하고 싶다면 명시해주면된다. a[target="_blank"]{속성=값}으로 정의하면 a태그중 tartget의 속성이 _blank 속성인 녀석들만 적용된다.
6.문자열 속성선택자
문자열 속성 선택자는 속성에 문자열을 검사해서 적용한다. 예를들어 div[class~=box]{속성=값;}와 같은 경우다. 해당 경우에 div이면서 class에 box문자열이 포함되어 있을경우 적용된다. 여러가지 연산으로 처리 가능한대 아래의 표를 참고하자. 
사용 정의 
속성~=문자열  속성에 해당 문자열이 포함되어있을경우 
속성|=문자열 1.속성값이 문자열과 같거나
2.속성값이 문자열과 같으면서 -(하이픈)으로 시작되는경우 적용  
속성^=문자열 속성값이 해당 문자열로 시작하면 적용.
속성$=문자열 속성값이 해당 문자열로 끝나면 적용.
속성*=문자열 속성값에 해당문자열이 포함되어있을경우 (?뭐야 이거 왜 ~=와 똑같아 )

느낀점.

이로써 기본선택자에대한 포스팅이 끝났다. 아니 근데 왜 ~=와 *=의 결과가같은거지 ? 내부적으로 다른건가 ? 아니면내가 모르는건가.

다음은 조합 선택자를 배워볼것같다.  끝!

CSS는 스타일을 정의하는 녀석이다.

CSS의 문법 구조는 아래와 같다.

(태그)(선택자){(선언부)속성 : 값; 속성 : 값;}
ex.h1{ color:red; }

간단하다. 선택자에 태그명을(h1) 선언부블록에 속성과 값을 나열하면된다.

 

그럼 이제 스타일 시트를 사용해보도록하자 !

 

스타일 시트를 사용하는 방법은 3가지로 나눌수 있다. 옷을 입는 방법이 3가지인것.

하나하나 천천히 알아보도록하자 

 

1.내부 스타일 시트 사용하기 

 말그대로 HTML문서 내에서 정의 하여 사용하는방법이다. <style></style> 안에 CSS 스타일을 정의 하면 되는 아주 간단한 구조로. 선언 위치는 상관이 없다고 하지만 대충 장단점이 있는거같다. 
head태그안에 자식요소로 선언될경우 body가 불려오기 전에 스타일을 먼저 로딩해서 사용하는 장점이있지만 웹브라우저는 문서를 해석할때마다 CSS 코드를 매번 다시 읽기 때문에 성능상 좋지 못하는 단점도 가지고 있다고 책에서 이야기함. 

사용해보자면 

내부스타일 시트 !

See the Pen Untitled by Super Novice (@Super-Novice-the-typescripter) on CodePen.

 

 

이런식으로 내부에 적용하여 사용가능하다. 

 

2.외부 스타일 시트!

말그대로 외부에 파일을 생성해서 css 스타일을 정의 하는것이다. 설명할필요가 있는가! 외부에 .css확장자파일을 만들어 css 속성을 정의 한다음 html 문서 head에 <link>태그를 이용해 정의 하는 방식이다.

사용해보자면 !

외부 스타일시트!

See the Pen Untitled by Super Novice (@Super-Novice-the-typescripter) on CodePen.

 

 

이런식이긴 한데 코드 펜에서는 css파일을 직접 만들어서 적용하는것이 아니기에 html파일 css파일 코드도 첨부 하도록하겠다.

 

style.css

h1{
    color:red
}

cssHtml.html

<!DOCTYPE html>
<head>
    <titla>내부 스타일 시트 사용하기.</titla>
    <link rel="stylesheet" href="style.css"/>
</head>
<body>
    <h1>내부 스타일 시트</h1>
</body>
</html>

별거는 없다. 그냥 설명할 거리도 없다.

 

마지막으로 인라인 스타일 사용하기인데 그냥 요소에 개별적으로 스타일을 지정하는것이다. 개개인이 옷을 입듯 개성을 중요시 하는 느낌으로.

 

인라인 스타일 사용하기!

See the Pen Untitled by Super Novice (@Super-Novice-the-typescripter) on CodePen.

 

이로써 스케치인 HTML을 끝내고 본격적으로 꾸미는 CSS가 시작되었다. 얼마나 사용할지는 모르겠으나..

그래도 한번은 쭉 흝어 봐야하니까 참고 해야겠지... javaScript까지 갈길이 너무 먼것같다. CSS뭐 별거 없는거같은데. 

제일 복잡하고 뭐가 많이 있는거같다.. 전문적인 영역이다. 도대체 구조를 어떻게 잡아야할지도 모르겠고... 안드로이드로 되돌아가고 싶지만. 고통은 나를 더 강하게 만들어주는것. 열심히 !

for문의 작동방식에 대해서 

for(int i = 0; i < 10; i++) {
	System.out.println("i" + i);
}

위에 코드가 있을때 작동 방식이 (int i = 0;) -> (i < 10;) -> (i++) -> System.out.println("i" + i); 로 동작한다고 생각하고 사용해왔는데 (int i = 0;) -> (i < 10;) -> System.out.println("i" + i); -> (i++)으로 동작하는것이였다.

보기좋게 표기하자면

for([1]int i = 0; [2]i < 10; [4]i++) {
      [3]System.out.println("i" + i);
}

이된다.  때문에 

 

for([1]int i = 0; [2]i < 10; [4]++i) {
[3]System.out.println("i" + i);
}

로 작성시 실행시키면 처음값이 1이아닌 0으로 찍히는것을 알수 있다.

일단은 자동 형변환이다. 

익숙하게 잘사용하고 있으나. 원리를 잘 파악못하고 사용하고 있었다.

어떠한 두개의 리터럴 값이 계산될때 표현의 수가 더 큰 것으로 형변환이 이루워 진다.

 

예를들어 3(정수)+ 4.5(실수) 일경우 계산의 순서를 보자면 

 

(3 + 4.5) -> (자동형변환)(3.0 + 4.5) -> (7.5) 

이렇게 형변환되어 계산된다.

 

또한 정수와 정수의 나눗셈의경우 결과값이 실수가 나올수 있는데 연산시에 형 변환을 시켜주지 않으면 잘못된 값이 나오기때문에 주의해야한다. 예를들어서 아래의 식을보면 

double div = 10 / 20;의  div의 값을 확인해보면 0.5가 나와야 하는데 0이나오게된다.

이유는 div변수에 대입전에 실수가 아닌 10과 20 정수형으로 연산을 처리하였기때문에  소숫점이 버려져 0이되는것이다.

그렇기에 형변환을 명시적으로 해줄필요가 있다.  

double div = (double)10/20;이 대입시 10을 명시적(강제 캐스팅) 시켜줬으므로 

10.0 / 20으로 변환되고 자료형이 다른 두 수의 연산에서 표현의범위가 더 큰 자료형으로 형변환되므로 10.0/20.0으로 자동형변환이 이뤄지고 연산되어 0.5의 값이 double div의 변수에 들어가게된다.( 와 이걸 몰랐다는건 나 좀 심각했다는건가...)

 

두번째는 == 에대해서이다. == 이 비교문은 값이 같은것인지 비교하는것이 아니다. 주소 값을 비교하는것이다. 

값이 같은지를 비교하려면 equals르 비교해야한다. 참조 객체중에 String의 경우 ==로 값을 비교하면 잘못될수 있는데 이유는

String은 객체이지만 인스턴스를 생성시에 "new 생성자()"를 생략하고 바로 문자열을 변수에 집어넣을수 있는 특이한 객체이다.(다른 객체들도 객체를 바로 대입해서 넣을수 있지만 문자열은 객체가 아니기에)

 

예를들어

1.String txt = "안녕"; 
2.String txt = new String("안녕")

위와 같이 두가지로 초기화할수 있다.

 

그럼 뭐가 문제란 말인가? 일단 위에 두가지의 경우 메모리에 올라오는 방식이다르다.

 

1번 케이스의 경우에 해당 텍스트는 Heap 메모리 영역에 String Constant Pool이라는 영역에 적재된다. 

문자열들이 모여있는곳으로 한번 만들어진 문자열의 경우에 재사용된다.

예를들어 String a = "안녕"; String b = "안녕"; 이라는 두개의 변수를 선언시에 처음 a에서 "안녕"이라는 문자열이 String Constant Pool에 특정 메모리 주소에 생성되고 그이후에 개발자가 같은 문자열을 생성하게되면 새로 주소 값을 생성하는것이 아니라 a에서 쓰인 값의 주소값으로 재사용된다는것이다. 그렇기 때문에 == 비교문으로 연산시에 같은 주소값을 참조하고 있으므로 true가된다. 

 

하지만 2번째의 경우는 다르다. 객체를 새로 생성할때 즉 new 키워드를 가지고 생성시에 새로 메모리 주소를 할당 받고 그 메모리 주소 값이 해당 문자열이 생성된다. 그렇기 때문에 String a = new String("안녕"), String b = new String("안녕")의 경우 같은 문자열을 가지고 있지만 주소값은 서로 다른 값을 가지고 있다. 그렇기 때문에 주소값을 비교하는 ==연산자로 비교하면 같은 문자열을 가지고 있음에도 false가 나오는것이다. 이렇기 때문에 값자체를 비교하는 equals() 메소드를 이용해서 String을 비교하여야 안전한것이다. 

 

느낀점.

요즘 나라에서 지원하는 교육을 듣고 있는데..교육을 듣길 잘한것같다. 개발자가 되어 많지는 않지만 여러 개발을 해왔지만. 왜사용하는지도 모르고 사용하는것들 가장 기본적인것들을 잃어버리고 그냥 사용하고 있었다. 나라는 개발자는 결국 순살아파트와 같이 허대만 멀쩡하게 우둑커니 서있었던건 아니였을까... 주변 지인개발자들에게 교육을 듣는다고 하면 엄청 나쁘게보고 있다. 왜 그런걸듣는지 이해를 못하겠다는 눈빛과 말투로 나를 쏘아붙인다. 취업이 먼저라고 이력서나 내라고 난 개발이 먼저다. 돈을 조금 벌어도 내가 할수있는 스펙이 높아지면 그게 더 좋다. 어릴때부터 내가 무언가를 만드는걸 좋아했지. 부품이되는걸 좋아하지 않았다. 물론 세상을 살아가다보면 사회에 부품이 되어 살아가야겠지만. 그래도 혼자서 만드는것을 포기하고 싶지 않다. 항상 남의견에 따라서 잣대없이 결정했던 나날들이 후회된다. 내삶은 내가 사는것이니까 남들이 뭐라하면 그건 남들이 잘못된것이지 내가 잘못된것이 아니다. 내가 하고싶은대로 사는것이 제일 좋다. 서버까지 열심히해서 나의 서비스를 오픈하는날까지 화이팅.

 

+ Recent posts